XML シリアル化 - null 値を非表示にする 質問する

XML シリアル化 - null 値を非表示にする 質問する

標準の .NET Xml シリアライザーを使用する場合、すべての null 値を非表示にする方法はありますか? 以下は、私のクラスの出力の例です。null に設定されている場合は、null 許容整数を出力しません。

現在の XML 出力:

<?xml version="1.0" encoding="utf-8"?>
<myClass>
   <myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
   <myOtherInt>-1</myOtherInt>
</myClass>

私が欲しいもの:

<?xml version="1.0" encoding="utf-8"?>
<myClass>
   <myOtherInt>-1</myOtherInt>
</myClass>

ベストアンサー1

ShouldSerialize{PropertyName}メンバーをシリアル化するかどうかを XmlSerializer に指示するパターンを使用して関数を作成できます。

例えば、クラスプロパティがMyNullableInt次のように呼ばれる場合、

public bool ShouldSerializeMyNullableInt() 
{
  return MyNullableInt.HasValue;
}

完全なサンプルはこちら

public class Person
{
  public string Name {get;set;}
  public int? Age {get;set;}
  public bool ShouldSerializeAge()
  {
    return Age.HasValue;
  }
}

次のコードでシリアル化します

Person thePerson = new Person(){Name="Chris"};
XmlSerializer xs = new XmlSerializer(typeof(Person));
StringWriter sw = new StringWriter();
xs.Serialize(sw, thePerson);

結果は次のXMLになります - Ageがないことに注意してください

<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Chris</Name>
</Person>

おすすめ記事