Я использую XmlSerializer
для сериализации объектов С# в XML. У меня есть DefaultValueAttribute
для некоторых свойств классов, которые я пытаюсь сериализовать, когда я пытаюсь их сериализовать, кажется, что XmlSerializer
не включает значение в xml, если оно равно значению по умолчанию. Посмотрите на этот пример:
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Test
{
public class Person
{
[System.Xml.Serialization.XmlAttribute()]
[System.ComponentModel.DefaultValue("John")]
public string Name { get; set; }
}
public static class Test
{
public static void Main()
{
var serializer = new XmlSerializer(typeof(Person));
var person = new Person { Name = "John" };
using (var sw = new StringWriter())
{
using (var writer = XmlWriter.Create(sw))
{
serializer.Serialize(writer, person);
var xml = sw.ToString();
}
}
}
}
}
Он создаст следующий xml (атрибут имени уведомления недоступен):
<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
Я не могу изменить исходный код классов, поэтому НЕ МОГУ удалить DefaultValueAttribute
. Есть ли способ заставить XmlSerializer
сериализовать эти свойства без изменения исходного кода?