无法使用 protobuf-net 完全序列化 List<> 继承者
本文关键字:List 序列化 继承者 protobuf-net | 更新日期: 2023-09-27 18:34:39
我正在尝试序列化一个从List继承的现有类<>并具有成员。
当我使用 protobuf-net 序列化它时,它默认为 ListHandling,它可以很好地序列化列表中的元素,但忽略列表本身的成员。如果我将"IgnoreListHandling=true"与ProtoContract属性一起使用,则会发生相反的情况:列表上的成员被序列化,但列表项丢失。
我正在将现有应用程序移动到 protobuf,因此重新设计此类类将是最后的手段。
与其他几个序列化程序(包括像 XmlSerializer
这样的核心 .NET 序列化程序(一样,对于 protobuf-net,有些东西要么是列表 x,要么是叶子。从不考虑列表的成员:它们的存在只是为了充当列表。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;}
}