【问题标题】:How do I not Serialize an object if the object is empty如果对象为空,我如何不序列化对象
【发布时间】:2021-11-21 00:36:33
【问题描述】:

如果对象值为空,有没有办法不序列化对象? 我的 xml 一直有很多空白

<PersonName></PersonName>

(没有其他具有此值的对象正在序列化。)

【问题讨论】:

  • 你用什么序列化器?
  • 正常的 System.Xml.Serialization.XmlSerializer

标签: c# xml


【解决方案1】:

System.Xml.Serialization.XmlSerializer 默认会跳过空属性。所以你不必做任何事情。
显然,您需要跳过等于string.Empty 的属性。

使用XmlSerializer时,可以应用System.ComponentModel.DefaultValue属性来指定一个不会被序列化的值。

例如,你有下一节课:

public class Person
{        
    public int Id { get; set; }

    [DefaultValue("")]
    public string PersonName { get; set; }

    public int Age { get; set; }
}

使用以下代码时

var person = new Person { Id = 1, PersonName = "", Age = 20 };

var ser = new XmlSerializer(typeof(Person));
var settings = new XmlWriterSettings { Indent = true };
using (var writer = XmlWriter.Create("result.xml", settings))
{
    ser.Serialize(writer, person);
}

你会得到这个结果

<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>1</Id>
  <Age>20</Age>
</Person>

但要注意:反序列化时不会考虑这个属性。因此,从此类 XML 中,您将获得一个 Person 类,其 PersonName 属性等于 null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多