.NET XML シリアル化中の Null 値の削除
.NET の XmlSerializer
のデフォルトの動作には、シリアル化された XML 出力に null 値が含まれます。 これは多くの場合、望ましくないことになります。 これを防ぐ方法を検討してみましょう。 サンプル クラスから生成された次の XML について考えてみましょう:
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?><myclass><mynullableint p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance"></mynullableint><myotherint>-1</myotherint></myclass></code>
mynullableint
に設定された null 許容整数である null
が XML 内にまだ存在していることに注意してください。 解決策は、ShouldSerialize
パターンを使用することです。
null MyNullableInt
プロパティを除外するには、クラス内に次のメソッドを実装します。
<code class="language-csharp">public bool ShouldSerializeMyNullableInt() { return MyNullableInt.HasValue; }</code>
このメソッドは条件付きでシリアル化を制御します。 true
が値を保持している場合にのみ MyNullableInt
を返し、その値が XML に確実に含まれるようにします。 それ以外の場合は、false
を返し、要素を効果的に抑制します。
これが完全な例です:
<code class="language-csharp">public class Person { public string Name { get; set; } public int? Age { get; set; } public bool ShouldSerializeAge() { return Age.HasValue; } }</code>
この ShouldSerializeAge
メソッドを使用すると、次のコードは Age
要素が null であるため、この要素を含まない XML を生成します。
<code class="language-csharp">Person thePerson = new Person() { Name = "Chris" }; XmlSerializer xs = new XmlSerializer(typeof(Person)); StringWriter sw = new StringWriter(); xs.Serialize(sw, thePerson);</code>
結果の XML:
<code class="language-xml"><person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><name>Chris</name></person></code>
以上が.NET XML シリアル化で Null 値が表示されないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。