2010-08-11 34 views
4

我們可能需要爲我們的(大型的)C#應用程序中的類編寫我們自己的序列化程序 - BinarySerializer太慢且冗長,並且protobuf-net在基於接口的屬性我們有負載)。在C#中實現我們自己的序列化程序 - 提示和陷阱

有沒有人有任何好的提示和/或警告?我懷疑我們應該使用BinaryWriterBinaryReader,但是我們還沒有在C#中做太多的小工具,任何陷阱都將不勝感激!

同樣,有沒有人知道我可以看到的源代碼的手動序列化器?

+0

你的時間表是什麼?我可以嘗試整理V2(但我已經說了太久了) – 2010-08-11 21:40:54

+0

DataContractSerializer'怎麼樣? – 2010-08-11 21:48:22

+0

@Marc:那會很棒,但對我們來說可能不夠快,因爲我們需要時間來學習如何正確使用protobuf。 – 2010-08-11 22:36:59

回答

0

考慮Type Convertors。我們在ViewState中廣泛使用它們,它們工作得很好。

+0

不要去切線 - 但將序列化對象注入ViewState是我今天聽到的最可怕的事情 – 2010-08-11 22:22:20

+0

Pete - 這就是ASP.net在維護後期狀態方面的功能。這就是ViewState的用途。 – Fahad 2010-08-12 20:13:43

3

提示/警告?它可以是一個嚴重的代碼量。我建議編寫一些簡單的代碼可以更容易,該代碼可將現有模型轉換爲簡單的DTO,並可通過您選擇的現有序列化API輕鬆進行序列化。擁有一個DTO層(獨立於域實體)還允許更簡單的維護 - 您可以在不破壞序列化數據的情況下重構您的域實體。

爲自己做的選項(記住,你強調的是,該模型是相當複雜的保留,你是不是位小提琴手):

  • 寫入特定類型的系列化手動;很容易出錯,非常費力
  • 寫一個通用庫;瘋狂的金額工作解決所有的邊緣情況

這是後,你已經想出了一個序列化格式,工作有力,可延伸,並支持你所需要的場景(繼承等)。

+0

我們不是* C#* bit-fiddlers;事實上,我不是什麼人,但我的同事當然是。 – 2010-08-11 22:39:38

+0

我看不出DTO層如何加快序列化。這個問題可能在於.Net BinarySerializer固有的羅嗦,連同所有時髦的反射等等,它必須做一般的工作。 DTO層不會改變,是不是? – 2010-08-12 12:31:31

+0

@Joel - 好吧,也許如果DTO被設計爲適合protobuf-net; p – 2010-08-12 18:31:17