2012-06-05 36 views
8

我是新來的協議緩衝區,我使用的是VS2010的protobuf-net。從我在這裏讀到的Dictionary in protocol buffers看來,似乎protobuf可以序列化一個帶有對象類型作爲值的字典。但在這裏,他的網站上我讀到:C#.net協議緩衝區 - protobuf-net支持序列化對象值字典嗎?

注意事項類型

支持:

自定義類是:被標記爲數據合同有一個無參數 構造爲Silverlight:是很多市民共同原語等 單維數組:T []列表/ IList 字典/ IDictionary任何類型,其中 實現IEnumerable並具有Add(T)方法代碼假定 類型將在選舉成員周圍是可變的。因此, 定製結構不受支持,因爲它們應該是不可變的。

它似乎是支持。

我能成功編譯對象的名單,像這樣:

message ValuesObject { 
    optional int32 SomeVal = 1; 
    repeated SomeClass ListOfSomeClassTypes = 2; 
} 

這對於List<SomeClass>工作正常。爲什麼我不能使用protobuf-net a Dictionary<int, SomeClass>進行序列化?消息看起來是什麼樣的序列化Dictionary<int, SomeClass>

回答

9

A Dictionary<int,SomeClass>與protobuf網完美serailizable。 Protobuf-net工作原理最簡單當代碼優先時,所以:*只需在您的模型中有一個Dictionary<int,SomeClass>。您不需要使用.proto ,所有 - 主要用於跨平臺目的。該.proto規範有沒有一本字典的概念,但如果你需要使用.proto模式,那麼這個被序列爲:

message KeyValuePairInt32SomeClass { 
    required int32 Key = 1; 
    required SomeClass Value = 2; 
} 

與字典作爲

repeated KeyValuePairInt32SomeClass YourDictionary = [n];