XML序列化 - 消除空值元素

时间:2017-11-22 17:57:27

标签: c# .net xml-serialization

这是我的班级。

 public class Class1
{
    private int? intValue;
    public int? IntValue
    {
        get { return intValue; }
        set { intValue = value; }
    }

    bool ShouldSerializeIntValue()
    {
        return IntValue != null;  
    }

    private string stringValue;
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }

    bool ShouldSerializeStringValue()
    {
        return StringValue != null;
    }

    private decimal? decimalValue;
    public decimal? DecimalValue
    {
        get { return decimalValue; }
        set { decimalValue = value; }
    }

    bool ShouldSerializeDecimalValue()
    {
        return DecimalValue != null;
    }

}

}

这是我的XML序列化代码

        private string ToXml(object model)
    {
        if (model != null)
        {
            XmlSerializer Serializer = new XmlSerializer(model.GetType());
            XmlSerializerNamespaces NameSpaces = new XmlSerializerNamespaces();
            NameSpaces.Add("", "");
            StringWriter Writer = new StringWriter();
            XmlWriterSettings Settings = new XmlWriterSettings();
            using (XmlWriter XmlWriter = XmlWriter.Create(Writer))
            {
                Serializer.Serialize(XmlWriter, model,  NameSpaces);
            }
            return Writer.ToString();
        }
        else return null;

    }

当我尝试使用null int值进行Serialize时,它会像这样序列化。

<?xml version="1.0" encoding="utf-16"?><Class1><IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /><StringValue>Int value is null.</StringValue><DecimalValue>456.789</DecimalValue></Class1>

所以不要像这样序列化

<IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />

我想在序列化期间消除整个元素,当它为null时。

我看到有类似的问题,但我不确定这个特定类有什么问题,因为它总是如上所示序列化,我确实有&#34; ShouldSerialize&#34;功能

如何实现这一目标?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应将ShouldSerialize {PropertyName}方法标记为公开

public bool ShouldSerializeIntValue()
{
    return IntValue != null;  
}