2015年3月12日木曜日

【C#】XmlSerializerではsetアクセサーが呼ばれない

Dictionary<string, string>を保持したクラスにて、
インスタンス丸ごとシリアライズ・デシリアライズを行うため、
以下のようなプロパティを作成して実行した。 

public List<KeyAndValue<string, string>> Parameters
{
    set { Dictionary = ListToDictionary(value); }
    get { return DictionaryToList(value); }
}

シリアライズは問題なく行われたものの、
デシリアライズ後のDictionaryは空のまま。

シリアライズ時はget、デシリアライズ時はsetを行うのではという想定で、
setアクセサにブレークを張るものの引っかからない。

試しにgetアクセサにてブレークを張ったところ、
予想外に引っかかった。

なぜ?と言うことで調べて見たところ、
以下の記事が見つかった。

 http://goo.gl/W94Md0

XmlSerializer does not call the setter for a collection. Instead is calls the getter, and then adds items to the collection returned.
setアクセサを呼ばずに、getアクセサで取得したコレクションに対してアイテムを追加すると。

原因判明。



0 件のコメント:

コメントを投稿