Protobuf RuntimeTypeModel for Java

时间:2011-12-14 22:13:02

标签: protobuf-net

我在.net中有非常复杂的继承结构,包括泛型类。 示例

abstract class A{}
abstract class B<T> : A {}
sealed class C : B<CResponse>{}
sealed Class D : B<DResponse>{}

等等。 然后是包含多个A的Request类,然后序列化Request。 我使用protobuf-net v2中的RuntimeTypeModel来序列化创建的对象,这是一个理想的解决方案。当我在.net中反序列化时,TypeModel帮助我获取模式并自行解析类型。 我如何在java中反序列化。那里有RuntimeTypeModel吗?即使我为上面的层次结构(将手动)创建proto文件,我怎么知道要调用哪些对象构建器。 如果不可能这样做,你能建议一个解决方法

1 个答案:

答案 0 :(得分:0)

protobuf本身不直接支持泛型和继承; protobuf-net模仿通过封装形式的继承(在.proto术语中):

message A {
    optional B_CResponse B_CResponse = ?;
    optional B_DResponse B_DResponse = ?;
}
message B_CResponse {
    optional C C = ?;
}
message B_DResponse {
    optional D D = ?;
}
message C {
}
message D {
}

您可以根据需要添加任何成员,并且需要替换?与实际的字段数。您应该能够使用“protoc”从中生成兼容的模型。

标准Java实现没有RuntimeTypeModel AFAIK。