如何在 c# 中使用 XMLSerializer 序列化时包含具有默认值的属性

How to include properties with default values while serializing with XMLSerializer in c#

默认情况下,XMLSerializer 会在执行序列化时忽略具有默认值的属性。但我确实有一个特殊情况,无论默认值如何,每个 属性 都必须序列化。

同时,默认值属性还有其他用途,我无法删除 DefaultValueAttribute

准确地说,我无法删除 DefaultValueAttribute,同时,我希望使用 XML 序列化程序对所有属性进行序列化。

提前致谢

第一种方式。

创建数据传输对象。具有与原始 class 相同的属性集,但没有 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);

现在它将序列化默认值。