在从BinaryFormatter切换到protobuf-net期间, 我在序列化集合时发现了不同之处。
在下面的代码示例中,Deserialize(protobuf-net v2r470)返回 如果在其中实例化数组,则会产生不同的结果 班级(街道1)比班级(街道2)。
是否不允许序列化在类声明中实例化的集合?
[ProtoContract]
public class City
{
[ProtoMember(1)]
public string[] streets1;
[ProtoMember(2)]
public string[] streets2 = new string[2];
}
City city = new City();
// Instantiate and populate streets1
city.streets1 = new string[2];
city.streets1[0] = "streetA";
city.streets1[1] = "streetB";
// Populate streets2. Already instantiated
city.streets2[0] = "streetA";
city.streets2[1] = "streetB";
// Serializing
using (var file = File.Create("city.bin"))
{
Serializer.Serialize(file, city);
}
// Deserializing
using (var file = File.OpenRead("city.bin"))
{
City getCity = Serializer.Deserialize<City>(file);
}
反序列化在getCity中加载以下内容:
getCity.streets1:&#34; streetA&#34;,&#34; streetB&#34; (正如预期的那样)
getCity.streets2:null,null,&#34; streetA&#34;,&#34; streetB&#34; &lt; ---------为什么空的?
返回的空值与集合中的项目一样多。
答案 0 :(得分:3)
确实如此,但问题是protobuf-net假设(由于protobuf格式的可连接特性)它应该扩展(追加)列表/数组,以及你的字段初始化程序是从2开始。
此处至少有3个修复程序: