第一种方式。
创建一个数据传输对象。具有与原始类相同的一组属性,但没有 DefaultValue 属性。
例如你有
public class Person
{
[DefaultValue(30)]
public int Age { get; set; }
public string Name { get; set; }
}
创建
public class PersonDto
{
public int Age { get; set; }
public string Name { get; set; }
}
这样序列化:
var person = new Person { Age = 30, Name = "John" }; // original object
var personDto = new PersonDto { Age = person.Age, Name = person.Name }; // DTO
var xs = new XmlSerializer(typeof(PersonDto));
xs.Serialize(someStream, personDto);
当然,您可以使用从一种对象类型到另一种对象类型的自动映射。喜欢AutoMapper。
第二种方式。
使用XmlAttributeOverrides。
var person = new Person { Age = 30, Name = "John" };
var overrides = new XmlAttributeOverrides();
var attrs = new XmlAttributes();
attrs.XmlElements.Add(new XmlElementAttribute("Age"));
overrides.Add(typeof(Person), nameof(Person.Age), attrs);
var xs = new XmlSerializer(typeof(Person), overrides);
xs.Serialize(someStream, person);
现在它将序列化默认值。