我有數據存儲在一個類的實例已被序列化.net BinaryFormatter。我現在想要重命名類中的某個字段,但仍然能夠反序列化舊數據。重命名字段,然後反序列化在C#中
一個選項是手動實現ISerializable並反序列化類的所有字段。但是,這看起來像很多工作,特別是如果我的課有很多領域,我只重新命名了一個領域。
有沒有更好的方法?
Craig建議保留舊類的反序列化副本,並將值複製到新類中。我在其他地方也看到了這一點 - 這對於實現ISerializable有什麼優勢?據我所見,複製這個類給我留下了兩個幾乎完全相同的類的副本,並且我仍然必須將所有舊類的值複製到新類中 - 這看起來與實現ISerializable具有相同的工作量幾乎重複類混入。
兩個答案都提到了Binders。我已經成功地使用SerializationBinder來反序列化一個被序列化爲類Foo的類Bar,但那是因爲類的名稱改變了。當你重命名一個字段時,SerializationBinder是否也有幫助 - 例如,當int m_Left被重命名爲int m_Right時?
在Binder的BindToType方法中,當您獲得帶有目標類型(類)的typeName字符串時,只需返回更改屬性的新類型即可。類已經改變了屬性,但現在是不同的類型。沒有辦法只適用於一個物業。 – 2009-06-02 23:23:14