如果我想序列化一個對象,我必須使用[Serializable]
屬性,並且所有成員變量都將寫入該文件。我不知道如何進行版本控制,例如如果我添加一個新的成員變量(重命名一個變量或只是刪除一個變量),然後我打開(反序列化)該文件如何確定對象/文件版本,以便我可以正確設置新成員或進行某種遷移?我怎樣才能確定變量是否在加載過程中被初始化(被解串器忽略)。C#中的序列化和對象版本控制
我知道有版本容忍的方法,我可以用[OptionalField(VersionAdded = 1)]
屬性標記變量。如果我打開一箇舊文件,框架將忽略這個可選的(新變量),它將只是零/空。但是,我又如何確定變量是通過加載進行初始化還是被忽略。
我可以將類/對象版本號寫入流中。使用ISerializable
的方法並在constructor(SerializationInfo oInfo, StreamingContext context)
方法中讀取此版本號。這將準確告訴我流中的類版本是什麼。
但是我期望C#中的流式框架已經實現了這種類型的版本控制。我嘗試從SerializationInfo
獲取Assembly版本,但它始終設置爲當前版本,而不是保存對象時使用的版本。
什麼是首選方法?我發現了很多在網絡上的文章,但我無法找到這裏面解決的版本一個很好的解決方案......
任何幫助表示讚賞 謝謝, 深淵,如果有些什麼
+1用於暗示使用不同於.NET序列化的方法。 – Theraot 2013-03-27 05:14:39