Первый путь.
Создать объект передачи данных. С тем же набором свойств, что и у исходного класса, но без атрибутов 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);
Теперь он будет сериализовать значение по умолчанию.