2012-04-19 13 views
5

シリアル化されたオブジェクトがXMLとして保存されていますが、これらのオブジェクトに2つの変数を追加したいと考えています。シリアル化されたオブジェクトを変更するには?

は、ここに私のオブジェクト:このオブジェクトはかなり連載されています

public class MyObject{ 
    public Int32 MyVariables = 0; 
} 

、と私は自分のアプリケーションにこれらの「古い」ファイルを読み取る能力を維持したいと思います。

しかし、私は、次のような、より良い物を作るために、いくつかのより多くの変数を追加する必要があります。誰もがこれらの新しい変数を追加するための最善の方法を提案することができます

public class MyObject{ 
    public Int32 MyVariables = 0; 
    public Dictionary<string,MyEnum> MyDict = new Dictionary<string,MyEnum>(); 
} 

?私は実際にMyObjectを変更して辞書を追加しました。私はそれがもはや正しく読み込まれていないと思います。

ありがとうございます!

編集:私はまた、オブジェクトに読み込むときに、それが失敗した場所を確認するためにどこかの例外をキャッチすることはできないんだけど、私はそうするためにこれをやっている:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
object obj = formatter.Deserialize(File.Open(Path, FileMode.Open)); 

編集2:私はこれを信じます実際に私が辞書の一部として列挙型を使用していることが原因である可能性があります。列挙型の上に[Serializable]を追加しましたが、それでも動作しません。

答えて

4

新しい変数を追加するだけです。

XMLシリアライザが新しい変数に適切な表現を見つけられなかった場合、デフォルト値で初期化されます。

+0

私はこれがうまくいくと思っていました(実際には、それをint型と辞書型のどちらかにすれば、デフォルトでは辞書はシリアライズできません) – Geesu

+0

XMLシリアライザでディクショナリを直列化することはできません。ただし、回避策があります。私はリンクを掘り下げようとします。 –

+1

ここでは、XMLシリアライザで辞書を使用する方法の1つです... http://johnwsaunders3.wordpress.com/2009/03/10/one-way-to-serialize-dictionaries/ –

関連する問題