无法使用 protobuf-net 完全序列化 List<> 继承者

本文关键字:List 序列化 继承者 protobuf-net | 更新日期: 2023-09-27 18:34:39

我正在尝试序列化一个从List继承的现有类<>并具有成员。

当我使用 protobuf-net 序列化它时,它默认为 ListHandling,它可以很好地序列化列表中的元素,但忽略列表本身的成员。如果我将"IgnoreListHandling=true"与ProtoContract属性一起使用,则会发生相反的情况:列表上的成员被序列化,但列表项丢失。

我正在将现有应用程序移动到 protobuf,因此重新设计此类类将是最后的手段。

无法使用 protobuf-net 完全序列化 List<> 继承者

与其他几个序列化程序(包括像 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;}
}
相关文章: