C# protobuf网络中的动态protobuf消息

C# protobuf网络中的动态protobuf消息,c#,c++,protobuf-net,C#,C++,Protobuf Net,我正在构建插件架构。用户可以构建自己的插件,我允许他们将自己的插件设置放在protobuf中(我不知道用户会放什么类型的插件) Protos消息: message pbPlugin{ required string id = 1; required string type = 2; optional bytes settings = 3; optional bytes settings_descriptor= 4; } message pbMyPluginSe

我正在构建插件架构。用户可以构建自己的插件,我允许他们将自己的插件设置放在
protobuf
中(我不知道用户会放什么类型的插件)

Protos消息:

message pbPlugin{
    required string id = 1; 
    required string type = 2;
    optional bytes settings = 3;
    optional bytes settings_descriptor= 4;
}

message pbMyPluginSetting{
    optional double exposure=1;
    optional int32 pixel_clock=2;
}
服务器端(c++):

因此,用户正在制作自己的
protobuf
消息,他正在序列化它,并将其放入
pbPlugin
消息的设置字段中,同时他正在序列化此消息描述符

现在在客户端(c#应用程序),我将返回我的
pbPlugin
消息,我想反序列化设置字段,并更改曝光和
像素时钟。我的问题是不知道如何在不知道消息类型的情况下反序列化消息?在
协议网络中是否可能

<> > C++中,我使用序列化的描述符和<代码> DealMeCaseMauleStudio<代码>来创建消息,将反序列化设置放入./P>
DynamicMessageFactory dmf;
Message* actual_msg = dmf.GetPrototype(deserialized_descriptor)->New();
这样我可以访问和更改字段值。
我怎样才能实现它呢?经过进一步的调查,我找到了这个问题的解决方案。遗憾的是,使用protobuf网络似乎不可能,但使用protobuf sharp port却很容易。我已经替换了库,从那个里你们可以像这样访问文件描述符

-获取文件描述符:

global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto fdp= global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.ParseFrom(settings_descriptors);
global::Google.ProtocolBuffers.Descriptors.MessageDescriptor descriptor= fdp.MessageTypes[0];
-获取消息描述符:

global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto fdp= global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.ParseFrom(settings_descriptors);
global::Google.ProtocolBuffers.Descriptors.MessageDescriptor descriptor= fdp.MessageTypes[0];
从那里您可以获得动态消息:

Google.ProtocolBuffers.DynamicMessage dynamic_message = Google.ProtocolBuffers.DynamicMessage.GetDefaultInstance(descriptor);
希望它能帮助有同样问题的人