如何描述protobuf-net中的Any类型?

时间:2016-01-06 16:29:44

标签: protocol-buffers protobuf-net

在google protobuf v3中,有Any类型允许您序列化标识邮件的名称/网址(https://developers.google.com/protocol-buffers/docs/proto3#anyhttps://github.com/google/protobuf/blob/master/src/google/protobuf/any.proto)。

是否有可能描述这个构造并让protobuf-net序列化/反序列化它?我需要它遵循protobuf v3标准,因此DynamicType / bcl.NetObjectProxy是关闭的,但不是二进制兼容的。

如果没有,使用protobuf-net使用Any构造序列化对象的最佳方法是什么?我真的不想切换到protobuf-csharp版本。

1 个答案:

答案 0 :(得分:0)

最终,Any可以被视为:

[ProtoContract]
public sealed class Any {
    [ProtoMember(1)] public string type_url {get;set;}
    [ProtoMember(2)] public byte[] value {get;set;}
}

从那里,您可以在网址上执行switch(或字典查找),将值加载到MemoryStream,然后回调到protobuf-net。对于序列化,类型url可能存储在针对类型的属性中,但这是更棘手的雾反序列化。也许是字符串到字体的字典和非通用的API。