繁体   English   中英

如果 object 为空,我如何不序列化 object

[英]How do I not Serialize an object if the object is empty

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

<PersonName></PersonName>

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

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

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

例如,您有下一个 class:

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 class ,其PersonName属性等于null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM