XmlSerializer如何排除空值但保留标记? C#

时间:2015-05-13 08:30:18

标签: c# asp.net xml-serialization nullable xmlserializer

我的班级

    public MyClass
    {
       [DataMemberAttribute(EmitDefaultValue = true)]
       public decimal? a { get; set; }
       [DataMemberAttribute(EmitDefaultValue = true)]
       public DateTime? b { get; set; }
       [DataMemberAttribute(EmitDefaultValue = true)]
       public int? c { get; set; }
       [DataMemberAttribute(EmitDefaultValue = true)]
       public bool? d { get; set; }
    }

Decimal,DateTime和int可以为空。所以我有:

<MyClass ...>
    <a>3</a>
    <b i:nil="true"/>
    <c i:nil="true"/>
    <d i:nil="true"/>
</MyClass>

当a,b,c为null时,我想得到这个:

<MyClass ...>
    <a>3</a>
    <b/>
    <c/>
    <d/>
</MyClass>

2 个答案:

答案 0 :(得分:0)

你只需要为你想要的每个元素创建如下属性:

3n+1

答案 1 :(得分:0)

我最后这样做了:

XmlSerializer.SerializeToWriter(data, strw);
XDocument xdoc = XDocument.Load("myxmlfile.xml");

foreach (var attribute in xdoc.Descendants())
{
     if (attribute.FirstAttribute != null && attribute.FirstAttribute.ToString().Contains("i:nil"))
            attribute.FirstAttribute.Remove();
}
xdoc.Save("myxmlfile.xml");

在我班上我有

[DataMemberAttribute(EmitDefaultValue = true)]

因此,当它为空时,它会生成&#39; i:nil =&#34; true&#34;&#39;,然后我只需删除它。