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

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

我的类(class)

    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>

最佳答案

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

 public MyClass
    {

    [System.Xml.Serialization.XmlElement("b",IsNullable = false)]
        public object b
        {
            get
            {
                return b;
            }
            set
            {
                if (value == null)
                {
                    b = null;
                }
                else if (value is DateTime || value is DateTime?)
                {
                    b = (DateTime)value;
                }
                else
                {
                    b = DateTime.Parse(value.ToString());
                }
            }
        }

 //public object b ....

}

关于c# - XmlSerializer 如何排除空值但保留标记? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209586/

相关文章:

c# - 从集合中查找缺失的日期

c# - 如何在 Page_Load 获取用户本地时间

c# - 单击过期链接如何在重置密码的上下文中工作

c# - 在 C# 中使用 Datacontract 反序列化谷歌地理编码 XML

C#/.NET XML 序列化程序 - 使用属性作为元素名称

c# - 从 JavaScript 访问 ASP.NET session 变量

c# - 在 XAML 中访问类变量

C# System.Xml.Serialization - 仅使用 <a></a> 而从不使用 <a/>

c# - NET Framework 从 v3.5 迁移到 v4.0

asp.net - session 状态只能在 enableSessionState 设置为 true 时使用