2012-06-12 18 views
2

我想圍繞序列化我的頭。但是,如果出於任何原因需要添加或刪除一些值或屬性,會發生什麼?這將如何影響內容?或者這不是一個問題?或者我該如何避免這種情況?序列化:是否會改變基礎類是一個問題?

+0

這取決於您使用的序列化機制。 BinaryFormatter的? XmlSerializer的? Json.NET?這是一個適度複雜的話題。 –

+0

對不起。我正在使用XmlSerializer進行學習,然後計劃轉移到用於SQL存儲的BinaryFormatter。這比我想象的更復雜,我接受了嗎? –

+0

我強烈建議你**不要**移動到BinaryFormatter的SQL存儲 - 它不是(IMO)非常適合存儲在任何持續時間。我虛心地提交protobuf-net可能是一個更好的選擇(我是作者;它是免費的,等等,並且專門設計以避免BinaryFormatter中的許多問題) –

回答

2

正如人們已經指出的那樣,它取決於您的序列化程序。 XmlSerializer是比較容易在這種情況下處理:

  1. 串行器的工作原理對公共接口,所以如果你改變實現,一切正常。
  2. XML是人類可讀的,因此很容易用手或用一些XML實用程序來解析。因此,如果一切出錯,您可以編寫一個版本轉換器。

考慮Jon的更多提示,更多的提示,特別是與NonSerializedOptionalField屬性。

1

這一切都取決於您正在使用的序列化技術,以及您是否計劃反序列化遺留對象。

我相信你可能遇到一些問題,如果你添加或刪除屬性,仍然想反序列化舊對象的版本,這取決於你正在做什麼類型的序列化。

對於的BinaryFormatterSoapFormatter

  • 如果要添加新的屬性,你需要用OptionalField Attribute來裝飾它們,這樣你仍然可以反序列化老版本的對象沒有這樣的新的領域。
  • 如果您正在「刪除」屬性,則必須將它們留在代碼中,但用OptionalField Attribute裝飾它們,以便仍可反序列化仍舊具有已刪除字段的舊對象的舊版本對象。
1

我可以說XmlSerializer,因爲它在我自己的項目中廣泛使用。

添加屬性不會導致XmlSerializer出現任何問題,序列化xml中缺少的屬性將保持其默認值。刪除或重命名現有屬性的效果僅僅是數據丟失。除非您處理原始的xml AS xml或文本文件,否則刪除或重命名的屬性中的數據會丟失。在使用XmlSerializer時,不需要特殊的屬性來添加,刪除或重命名屬性。

相關問題