2011-11-03 69 views
2

我試圖使用protobuf .net來序列化從基類繼承的類的實例。當試圖序列化\反序列化時,我收到了一個關於「type not expected」的異常。正如我已經閱讀過的,將基於派生類型的protoinclude添加到基礎將會解決問題。但是,我的問題是我不能添加屬性,因爲我不知道將派生我的基礎的類型。正如我已經讀過的,我明白V2將提供一種定義類型模型的方法來描述繼承。所以我的問題是:繼承和已知類型問題

  1. 當V2版本將avilable?
  2. 在解決此問題的同時是否有解決方法?

由於提前,

吉爾

回答

0

V2是的NuGet可都和谷歌代碼(的NuGet是未來幾轉速IIRC - 無一不是頭後面一點點)。有幾個v1功能尚未重新實現,但對於大多數用途,您不會注意到這一點。他們將在適當的時候重新添加。

重新提出您的問題;可通過MetaType.AddSubType獲得 - 但是,要使用該方法,您必須能夠在未來重現每個子類型的相同的int標識符 - 它們是重要的鍵,不能更改。

RuntimeTypeModel.Default[typeof(SomeType)].AddSubType(7, subType); 

在「對象」屬性上也有DynamicType可用 - 但是這與基於繼承的模型有一些關係;我現在會避免這種情況(這也將在短期內得到糾正)。

+0

嗨馬克, 感謝您的回答,但我不確定我完全理解您的答案。 1.您在答案中提供的樣本是否可以在v1最新版本發佈(「protobuf-net-VS10.msi」? )2.您的意思是「nuget是IIRC之前的幾個轉速 - 兩者都有點在頭部後面「?對不起這個問題,但什麼是nuget和iirc?我不明白這是否有V2的最終版本下載? 在谷歌代碼,我只看到測試版下載(」protobuf網v2 beta r450.zip「)。我試過了,但有一些方法沒有實現異常。 謝謝 Gil –

+0

@Gil」nuget「是VS2010中的庫下載工具 - 它允許您訪問/更新數千個庫(如protobuf-net)很容易在IDE中使用,還沒有「final」v2,就像整個隊列中的功能建議等一樣。「beta」標記持續存在由於出色的*很少使用* v1功能,如'.GetProto '(用於從模型中提取.proto方案) - 這些將被重新添加,但尚未被重新編寫**但是**。所以如果你需要的話,v1現在可能是更好的選擇。所有日常功能都存在。 –