.net protobuf网和派生自泛型集合

.net protobuf网和派生自泛型集合,.net,protocol-buffers,protobuf-net,.net,Protocol Buffers,Protobuf Net,我很难弄清楚如何让protobuf net序列化从List派生的对象。我已尝试添加ProtoInclude属性,但收到一个ProtoBuf.ProtoException:ProtoIncludeAttribute的已知类型列表'1必须是UserTypeCollection的直接子类。当我删除ProtoInclude属性时,数据似乎根本没有被序列化。我似乎在任何地方都找不到这种情况的例子。我添加protobuf序列化作为WS-api的一个选项,并且需要保持与DataContractSerializ

我很难弄清楚如何让protobuf net序列化从List派生的对象。我已尝试添加ProtoInclude属性,但收到一个ProtoBuf.ProtoException:ProtoIncludeAttribute的已知类型列表'1必须是UserTypeCollection的直接子类。当我删除ProtoInclude属性时,数据似乎根本没有被序列化。我似乎在任何地方都找不到这种情况的例子。我添加protobuf序列化作为WS-api的一个选项,并且需要保持与DataContractSerializer的兼容性

[CollectionDataContract(), ProtoContract(InferTagFromName = true)]
[ProtoInclude(100, typeof(List<UserType>))]
public class UserTypeCollection : List<UserType>
{ ... }

[DataContract(), ProtoContract(InferTagFromName = true)]
public class UserType { ... }
[CollectionDataContract(),ProtoContract(InferTagFromName=true)]
[ProtoInclude(100,类型(列表))]
公共类UserTypeCollection:列表
{ ... }
[DataContract(),ProtoContract(InferTagFromName=true)]
公共类用户类型{…}

ProtoInclude
用于表示子类型,而不是基本类型(毕竟,基本类型已经知道)。而且,
IList
处理在很大程度上应该是隐式的;请注意,“推断…”等在列表中的作用很小,因为列表只是包含的项目的序列

对于以下内容,我假设您正在尝试序列化列表(作为最上面的对象):

我目前没有在正确的机器上,但在已发布的DLL中,我希望通过对象包装列表可以使其正常工作:

[DataContract]
public class Foo {
    private readonly UserTypeCollection items = new UserTypeCollection();
    [DataMember(Order=1)]
    public UserTypeCollection Items {get{return items;}}
}
在“v2”中,我希望这个场景从一开始就可以工作。我明天会尝试测试这个(当我有合适的机器时)


另一种想法;子类化
List
通常不是很有用,因为这些方法都不是虚拟的。当然,由你决定。最后一个注意事项是,如果您希望在不影响类型本身的情况下对序列化进行更多控制,那么在“v2”中,我们可以从外部描述模型。

您正在序列化的对象是什么?名单?或者一些外部物体?