やっと起きたエンジニアのメモ

ruby, js, 興味の赴くままに

XmlSerializerのデシリアライズで空白が削除されないようにする

とあるバグの調査中に気づいたこと、、今更感もあるけどメモしておく

XMLのデシリアライズ時に、要素の空白が削除されていることに気づいた。

空白をデータとして扱いたいのに、削除されているとは、、Σ(゚Д゚|||)

例えば、区切り文字を要素として格納する場合、区切り文字を空白として指定すると
下記のコードではデシリアライズで空白が削除される。

      XmlSerializer serializer = new XmlSerializer(typeof(Delimiter));
      Stream reader= new FileStream(filename,FileMode.Open);     
      Delimiter delimiter;

      delimiter = (Delimiter)serializer.Deserialize(reader);

空白を残したい場合にはXmlDocument.PreserveWhitespaceプロパティを使用する必要があるみたい。
XmlSerializerクラス自身が持っていればいいのに、、

仕方がないのでこんな感じで書いた。

      XmlSerializer serializer = new XmlSerializer(typeof(Delimiter));
      Stream reader= new FileStream(filename,FileMode.Open);
      XmlDocument doc = new XmlDocument();
      doc.PreserveWhitespace = false;
      doc.Load(reader);
   XmlNodeReader nodeReader = new XmlNodeReader(doc.DocumentElement);
      Delimiter delimiter;

      delimiter = (Delimiter)serializer.Deserialize(nodeReader);

もっといい書き方もあるんだろうが、、現状はこんな感じ