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);
もっといい書き方もあるんだろうが、、現状はこんな感じ