2
比方說,我們有以下三類:Protobuf網。反序列化基於
[ProtoContract]
[ProtoInclude(10, typeof(FirstType))]
[ProtoInclude(20, typeof(SecondType))]
public class Base
{
[ProtoMember(1)]
public int ClassId {get;set;}
}
public class FirstClass : Base
{
...
}
public class SecondClass : Base
{
...
}
還有的類ID(基類)和匹配的子類的類型關係。例如,
var obj1 = new FirstClass() {ClassId = 1}
var obj2 = new SecondClass() {ClassId = 2}
現在讓我們假設我們已經序列化了這些對象。問題是:是否有任何好的方法通過查看ClassId字段來反序列化基於類Id值的序列化protobuf?即,如果seramed protobuf中classId的值爲1,則使用FirstClass對剩餘流字節進行反串行化。
謝謝!
感謝您的回答!還有一個問題:通過ProtoReader讀取原始數據流的方式非常有趣。這聽起來像我可以讓我自己的自定義轉換器(如Json.Net中的JsonConverter)在反序列化時使用。 在Protobuf-net中,有沒有辦法通過這樣的自定義轉換器,以便在解除對象的同時,可以使用自定義轉換器而不是默認的轉換器? – soleiljy 2013-02-15 01:10:45
@soleiljy在此上下文中定義「自定義轉換器」? 「ProtoReader」和「ProtoWriter」是序列化程序在引擎蓋下使用的內容 - 但是,它們不是可定製的。只有一種閱讀基礎流的方法。如果你的意思是「我可以在ProtoReader之上編寫自己的引擎」 - 確定:玩得開心。這裏有一個自定義的'DataTable'序列化器的例子:https://code.google.com/p/protobuf-net/source/browse/trunk/DataTableSerializer – 2013-02-15 07:24:22