我正在尝试序列化继承自List<>的现有类并有会员。
当我使用protobuf-net对其进行序列化时,它默认为ListHandling,它将列表中的元素序列化,但忽略列表本身的成员。如果我使用ProtoContract属性使用“IgnoreListHandling = true”,则会发生相反的情况:列表中的成员被序列化但列表项丢失。
我正在将现有的应用程序移动到protobuf,因此重新设计这些类将是最后的选择。
答案 0 :(得分:2)
与其他几个序列化程序(包括核心.NET序列化程序,如XmlSerializer
)一样,对于protobuf-net,要么列表 xor 一片叶子。永远不会考虑列表的成员:它们仅存在以充当列表。 IgnoreListHandling
在两种模式之间切换,但是"列表和叶子都是"方案不受支持。
坦率地说,你所描述的听起来像一个可疑的设计选择无论如何。通常你会封装一个列表,而不是它的子类。所以而不是:
class MyStuff : List<Foo> {
public int ExtraValue {get;set;}
}
我强烈主张应该实施:
class MyStuff {
private readonly List<Foo> foos = new List<Foo>();
public List<Foo> Foos { get { return foos; } }
public int ExtraValue {get;set;}
}