ProtoBuf 反序列化读入含集合类的文件后,其集合的Count数量被累加,不知道什么原因
有这么个Class1类,里面有含100个值的 ObservableCollection列表,序列化保存后再读入,
ObservableCollection 里IsExpanded 不是100个值,而变成200个值,有知道原因么?
注:采用了ServiceStack.ProtoBuf的 序列化及反序列
[ProtoContract]
internal class Class1
{
public Class1()
{
// 生成100个bool值
IsExpanded = new ObservableCollection<bool>(new List<bool>(new bool[100]));
}
[ProtoMember(1)]
public ObservableCollection<bool>? IsExpanded { get; set; }
}
// 序列化写出
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
using var file = File.Create(@"d:\1.test");
ProtoBuf.Serializer.Serialize(file, class1);
}
//读入
private void button2_Click(object sender, EventArgs e)
{
using var file = File.OpenRead(@"d:\1.test");
var data= ProtoBuf.Serializer.Deserialize<Class1>(file);
//读入文件后,显示 列表的count 不是100,而是200,为什么
textBox1.Text = data.IsExpanded?.Count.ToString();
}
回答
问题补充:
经过研究发现,不仅仅是ObservableColletion ,包括List,数组等集合类,都会导列表Count的翻倍,初步认为,ProtoBuf 在反序列化的时候会访问构造函数,如果在构造函数里NEW 一个含100个值的列表,再加上从文件中读入的100个值的列表,这样就变成200个值的列表了,
不知道这是不是 ProtoBuf的bug。