【发布时间】:2021-11-21 00:36:33
【问题描述】:
如果对象值为空,有没有办法不序列化对象? 我的 xml 一直有很多空白
<PersonName></PersonName>
(没有其他具有此值的对象正在序列化。)
【问题讨论】:
-
你用什么序列化器?
-
正常的 System.Xml.Serialization.XmlSerializer
如果对象值为空,有没有办法不序列化对象? 我的 xml 一直有很多空白
<PersonName></PersonName>
(没有其他具有此值的对象正在序列化。)
【问题讨论】:
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。
【讨论】: