C# 如何在c中使用XMLSerializer序列化时包含具有默认值的属性#
默认情况下,C# 如何在c中使用XMLSerializer序列化时包含具有默认值的属性#,c#,serialization,xmlserializer,C#,Serialization,Xmlserializer,默认情况下,XMLSerializer在执行序列化时将忽略具有默认值的属性。但我有一个特殊的情况,每个属性都必须序列化,而不考虑默认值 同时,默认值属性用于其他用途,我无法删除DefaultValueAttribute 确切地说,我不能删除DefaultValueAttribute,同时,我希望使用XML序列化程序序列化所有属性 先谢谢你第一条路 创建数据传输对象。使用与原始类相同的属性集,但没有DefaultValue属性 比如你有 public class Person { [Def
XMLSerializer
在执行序列化时将忽略具有默认值的属性。但我有一个特殊的情况,每个属性都必须序列化,而不考虑默认值
同时,默认值属性用于其他用途,我无法删除DefaultValueAttribute
确切地说,我不能删除DefaultValueAttribute
,同时,我希望使用XML序列化程序序列化所有属性
先谢谢你第一条路
创建数据传输对象。使用与原始类相同的属性集,但没有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);
现在,它将序列化默认值。第二种方法就像一个符咒。谢谢。