2011-12-14 120 views
1

我在包含泛型類的.net中有非常複雜的繼承結構。 示例Protobuf RuntimeTypeModel for Java

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

等等。 然後是包含多個答案的請求類。然後序列化請求。 即時使用protobuf-net v2中的RuntimeTypeModel來序列化創建的對象,這是一個理想的解決方案。當我在.net中反序列化時,TypeModel幫助我獲取模式並自行解析類型。 我如何得到它在java中反序列化。有沒有可用的RuntimeTypeModel?即使我爲上面的層次結構(這將手動)創建原型文件,我將如何知道調用哪些對象生成器。 如果不可能這樣做,你能提出一種解決方法嗎?

回答

0

protobuf本身不直接支持泛型和繼承;通過封裝protobuf網模仿繼承,形式(在.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沒有任何關係。

+0

非常感謝Marc。我有這個成功的工作。關於日期時間字段的快速問題。我沒有他們作爲utc,這將是很難給我添加字符串中的新字段或日期時間長。有沒有辦法解決這個問題? – user1098765 2012-03-27 14:31:43