Protocol buffers 如何描述protobuf网络中的任何类型?

Protocol buffers 如何描述protobuf网络中的任何类型?,protocol-buffers,protobuf-net,Protocol Buffers,Protobuf Net,在GoogleProtobufV3中,有一种任意类型,允许您序列化标识消息的名称/url 是否可以描述此构造并让protobuf net对其进行序列化/反序列化?我需要它遵循protobuf v3标准,因此DynamicType/bcl.NetObjectProxy很接近,但不兼容二进制文件 如果不是,那么使用protobuf net用任何构造序列化对象的最佳方法是什么?我真的不想切换到protobuf csharp版本。最终,任何版本都可以被视为: [ProtoContract] public

在GoogleProtobufV3中,有一种任意类型,允许您序列化标识消息的名称/url

是否可以描述此构造并让protobuf net对其进行序列化/反序列化?我需要它遵循protobuf v3标准,因此DynamicType/bcl.NetObjectProxy很接近,但不兼容二进制文件

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

最终,任何版本都可以被视为:

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

从那里,您可以对url进行切换或字典查找,将值加载到MemoryStream中,然后调用protobuf net。对于序列化,类型url可能存储在针对该类型的属性中,但这是更复杂的反序列化。也许是一个字符串类型字典和非泛型API。

btw,我很乐意考虑用助手方法添加到库中的任何一个,但是我想看看正确的API是如何从名字中解析类型的。这不是一件小事,尤其是在反序列化过程中,序列化非常简单是的,我考虑过了。但我想让protobuf net对字节进行反序列化。在protobuf net中,我真正想要的是能够用类似ITypeFormatter。[反]序列化Proto[Reader/Writer],object的东西覆盖反序列化。它可以通过Json.net jsonconverteratertribute等属性进行选择和/或动态添加到覆盖默认值的模型中。然后用户可以100%控制输入/输出,本地实现[ProtoAny]等作为特定序列化程序的快捷方式。仅设置场景,最终目标是用asp.net 5 Web Api Websocket RPC的protobuf/json替换专有二进制序列化程序。使用任何插件都可以动态扩展WebSocket API表面和插件。Websocket Text/Bin模式将在Json/Protobuf序列化程序之间进行选择。因此,我还将进行protobuf canonical json序列化,并在这方面使用GetProto为其他不使用C的用户获取正确的.proto文件。但我更喜欢先使用代码而不是.proto,因为很难从泛型.proto文件中获得好的代码。@maloo问题:您需要支持其他非protobuf net库吗?因为:protobuf net实现了您很久以前描述的功能。。。作为动态的,IIRC不记得是在合同上,还是在成员身上,还是两者都在。但是,它的实现方式不同,并且与任何其他protobuf库都不直接兼容?如果是这样,则不会。当然,除非我无法让GetProto生成Any合约,但保留System.Object或类似的成员类型。听起来需要在protobuf网络上做一些工作。所以我可能只使用一个简单的protobuf reader/writer+T4代码+来自模型类型的protogen。这就是我对旧东西所做的,非常灵活、快速,但当然要编写和维护更多的代码。仅供参考,我目前正在积极致力于proto3支持和工具更新;我希望在2.3.0版本中看到完全的支持。