2011-09-28 19 views
1

メンバ変数の一部がstringで、値がnullであるオブジェクトをシリアル化する必要があります。 私は、次のコードを使用します。私はそれを望んでいませんがXmlTextWriterとnull文字列

 var writer = new XmlTextWriter(stream, Encoding.UTF8); 
     writer.Formatting = Formatting.Indented; 

     var s = new XmlSerializer(typeof(model.GetType()));    
     s.Serialize(writer, model); 

を値nullを持つ文字列は、(当然の行動を目的としている)は、XMLファイルには表示されません。 XmlTextWriterクラスをオーバーライドすることにより、null文字列をXmlファイルに表示させるにはどうすればよいですか?

EDIT:シリアル化する必要のあるオブジェクトモデルを変更できないため、Xml属性はオプションではありません。

答えて

1

あなたは使用することができますあなたもnullの場合、ファイルに書き込まれるようにしたい任意のメンバーに

[XmlElement(IsNullable = true)] 

を。

+0

あなたの答えに感謝します。私はオブジェクトモデルを変更することができないので、私はこのソリューションを使用することはできません。私はこの制約を含むように私の質問を編集しました。 – thumbmunkeys

+0

@ x0r:あなたのオブジェクトコレクションでサイクリングし、String.Emptyで空のアイテムを代用するのは解決策ではありません。 – Marco

+0

それは解決策になります!それはオブジェクトの集まりではありませんが、オブジェクトのツリーです。そのため、ツリーをトラバースするためにリフレクションを使用し、すべてのメンバー変数を調べ、これらの 'null'文字列を設定する必要があります。 – thumbmunkeys

1

あなたはメンバーにこの属性を使用することができます。

[XmlElement(IsNullable = true)] 

それは代わりにそれをシリアル化しないnullであることを指定し、あなたの要素に属性を設定します。

0

ObjektModleTreeを複製し、空の文字列で "null"文字列を置き換えることをお勧めします。

新しいクラスでXmlSerializerを継承し、 "null"文字列を除いてObjectModelTreeを複製します。 したがって、ObjektModelを変更できる場合は、独自のシリアライザを削除し、.NETシリアライザを使用して作業を行うことができます。

関連する問題