2010-06-16 64 views
1

幾個星期前,我正在使用protobuf-net的v2版本,相當成功。 (由於在Compact Framework上運行的預編譯序列化程序的速度,我想要使用V2)。一切工作都很好,直到我試圖序列化具有Dictionary類型屬性的對象。我收到以下錯誤:protobuf-net v2 alpha - Dictionary <string,string>的問題?

{「沒有爲類型定義的序列化程序:System.Collections.Generic.KeyValuePair`2 [[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089], [System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]}}

看起來好像有近期對改進字典支持所作的更改,所以我從今天獲取了最新的代碼。在構建CF3.5和FF3.5 dll後,我再次嘗試。現在我得到一個不同的錯誤「一旦凍結,模型不能改變。」如果我從Dictionary屬性中刪除ProtoMember屬性,似乎都可以正常工作。

有沒有人成功使用過protobuf-net的v2中的字典?這是否仍然過早發佈?我的速度測試顯示v2的速度是同類產品的兩倍,這似乎是準確的(驗證我希望使用穩定性較低的v2預alpha比特。)

+0

這應該從r346開始解決(不需要解決方法)。請讓我知道任何一種方式。 – 2010-06-20 22:08:19

+0

今天早上檢索了最新的,效果很好,謝謝! – Steve 2010-06-21 16:09:27

回答

2

這是確定的興趣。你有沒有可以用來調查的特定演示? (我是作者)


問題只是一個錯誤;在Compile()期間,它應該級聯模型,看看其他類型是否需要。它目前沒有這樣做(但是will soon; p)。在常規.NET中(使用RuntimeTypeModel)這不是問題 - 它可以隨時添加額外的類型。但在CF(或任何靜態編譯的DLL),這是不可能的。

直到Compile()是固定的,這裏的作弊是告訴它它還需要什麼。最簡單的方法是觸摸索引爲KeyValuePair<string,string>

model.Add(typeof(Parent), true); 
var discard = model[typeof(KeyValuePair<string, string>)]; 
model.Compile(...); 

我們不需要這個索引器返回(進入discard)的價值 - 我們只需要它已經執行填補空白的一些調用編譯之前。

+0

我想我可以把一個基本的例子,並得到它,謝謝你! – Steve 2010-06-18 22:20:08

+0

謝謝您的修正以及額外的理解。 – Steve 2010-06-21 16:10:01

相關問題