在 .NET XML 序列化期間消除空值
.NET XmlSerializer
的預設行為在序列化 XML 輸出中包含空值。 這通常是不受歡迎的。 讓我們來看看如何防止這種情況發生。 考慮從範例類別產生的以下 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
的可空整數)仍存在於 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
元素的 XML,因為它為 null:
<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 序列化出現空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!