【问题标题】:XML Serialization - Eliminate null value elementsXML 序列化 - 消除空值元素
【发布时间】:2017-11-23 02:19:09
【问题描述】:

这是我的课。

 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 值进行序列化时,它正在像这样进行序列化。

<?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" />

我想在序列化过程中消除整个元素,当它为空时。

我看到有类似的问题,但我不确定这个特定的类有什么问题,因为它总是如上所示进行序列化,而且我确实有“ShouldSerialize”函数。

如何做到这一点?有什么想法吗?

【问题讨论】:

    标签: c# .net xml-serialization


    【解决方案1】:

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

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

    【讨论】:

    • 傻我 :) 很好。谢谢。
    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多