Java Protobuf是否可以反序列化使用Protobuf-net序列化的以下DerivedMessage?
namespace Test.Protobuf
{
[ProtoBuf.ProtoContract]
[ProtoBuf.ProtoInclude(2550, "Test.Protobuf.DerivedMessage")]
class BaseMessage
{
[ProtoBuf.ProtoMember(1)]
public string MessageId { get; set; }
[ProtoBuf.ProtoMember(2)]
public int CommandId { get; set; }
}
[ProtoBuf.ProtoContract]
class DerivedMessage : BaseMessage
{
[ProtoBuf.ProtoMember(1)]
public int ClientId { get; set; }
[ProtoBuf.ProtoMember(2)]
public string Message { get; set; }
[ProtoBuf.ProtoMember(3)]
public string Description { get; set; }
}
}
DerivedMessage扩展了BaseMessage,阅读文档解决方案似乎是在原型文件中使用嵌套消息 但它不起作用,这是我的原型文件:
package protobuf;
option java_package = "test.protobuf";
option java_outer_classname = "Proto";
message BaseMessage {
optional string message_id = 1;
optional int32 command_id = 2;
}
message DerivedMessage {
optional int32 client_id = 1;
optional string token = 2;
optional string message = 3;
optional string description = 4;
optional BaseMessage base_message = 5;
}
有解决方案吗?
谢谢
答案 0 :(得分:0)
字段编号必须匹配,并且在BaseMessage中,而不是DerivedMessage。
在无关的消息中,您在DerivedMessage中的其他字段看起来很不自然; “令牌”来自数字,后面的2个字段是一个接一个。
message BaseMessage {
optional string message_id = 1;
optional int32 command_id = 2;
optional DerivedMessage derived_message = 2550;
}
message DerivedMessage {
optional int32 client_id = 1;
optional string message = 2;
optional string description = 3;
}
答案 1 :(得分:0)
派生类是否也可能没有与父类具有相同ID的字段?在您的示例中,messageId和clientId都具有相同的标识符:1。