我无法弄清楚如何让 protobuf-net 序列化从 List[CollectionDataContract(), ProtoContract(InferTagFromName = true)]
[ProtoInclude(100, typeof(List<UserType>))]
public class UserTypeCollection : List<UserType>
{ ... }
[DataContract(), ProtoContract(InferTagFromName = true)]
public class UserType { ... }
最佳答案
ProtoInclude
用于表示子类型,而不是基类型(毕竟基类型是已知的)。另外,IList<T>
处理应该在很大程度上是隐含的;请注意,“推断...”等在列表的情况下作用很小,因为列表只是包含项目的序列。
对于以下内容,我假设您正在尝试序列化列表(作为最顶层的对象):
我目前不在正确的机器上,但在已发布的 dll 中,我希望通过对象包装列表可以使其工作:
[DataContract]
public class Foo {
private readonly UserTypeCollection items = new UserTypeCollection();
[DataMember(Order=1)]
public UserTypeCollection Items {get{return items;}}
}
在“v2”中,我希望这个场景从一开始就有效。我明天会尝试测试这个(当我有合适的机器时)。
另一种想法;子类化
List<T>
通常不是很有用,因为没有一个方法是虚拟的。当然,取决于你。最后一点 - 在“v2”中,如果您想对序列化有更多控制但不影响类型本身,我们可以在外部描述模型。
关于.net - protobuf-net 和从泛型集合派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427216/