一尘不染

XML序列化-隐藏空值

c#

使用标准的.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>

阅读 578

收藏
2020-05-19

共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的结果-注意没有年龄

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