在 .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中文网其他相关文章!