使用标准的.NET Xml序列化器时,有什么方法可以隐藏所有空值?下面是我的类输出的示例。我不想输出可为空的整数(如果将它们设置为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>
您可以使用ShouldSerialize{PropertyName}告诉XmlSerializer是否应序列化成员的模式来创建函数。
ShouldSerialize{PropertyName}
例如,如果您的类属性被调用,MyNullableInt您可能拥有
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的结果-注意没有年龄
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Name>Chris</Name> </Person>