繁体   English   中英

如何使用 protobuf-net 序列化和反序列化自定义列表

[英]How to serialize and deserialize Custom Lists with protobuf-net

我有一个自定义列表,其中包含一些我需要序列化的属性及其包含的项目。

但是,一旦我将 ProtoContract 属性添加到我的自定义列表中,它的项目就不会再序列化了。

例子:

    [ProtoContract]
    public class MyCollection : List<string> { 

    [ProtoMember(1)]
    public string MyAdditionalField;
   }

这不应该开箱即用吗?

我能想到的唯一可能的解决方法是使用自定义列表的代理,其中包含一个单独的列表,然后包含所有数据。 然而,我们正在处理相当多的自定义列表......所以这将是一种低效的方法。

谢谢你,TH

XmlSerializerTypeDescriptor (可能还有DataContractSerializer - 我还没有检查过)一样,列表与包含列表之间存在很大的区别。 如果某物是一个列表,它本身没有值。

首选的布局有一个列表值。

在协议级别,根本无法表示它,因为这只是repeated string {name} = {field} - MyAdditionalField到 go 根本无处可去。

(更新); 经过测试,确实XmlSerializer的行为相同:

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
  <string>abc</string>
  <string>def</string>
</ArrayOfString>

DataContractSerializer更讨厌它,抛出:

类型“MyCollection”是无效的集合类型,因为它具有 DataContractAttribute 属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM