在C#中使用XMLSerializer进行序列化时如何包括具有默认值的属性

时间:2018-06-28 09:46:40

标签: c# serialization xmlserializer

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

同时,默认值属性还用于其他目的,我无法删除DefaultValueAttribute

确切地说,我无法删除DefaultValueAttribute,同时,我希望所有属性都可以使用XML序列化器进行序列化。

预先感谢

1 个答案:

答案 0 :(得分:1)

第一种方式。

创建一个数据传输对象。具有与原始类相同的属性集,但没有foreach(var g in grouped = numbers.GroupBy(i => i)) { var number = g.Key; var freq = g.Count(); } 属性。

例如,您拥有

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

现在它将序列化默认值。