#c# #.net #refactoring #xml-serialization
#c# #.net #рефакторинг #xml-сериализация
Вопрос:
У меня есть класс, в котором есть несколько общедоступных полей, помеченных атрибутами XML serializable:
[XmlAttribute]
public string ExampleField = string.Empty;
Я намерен реорганизовать эти поля (и только эти поля) в качестве автоматических свойств:
[XmlAttribute]
public string ExampleField { get; set; }
Будут ли какие-либо проблемы с десериализацией экземпляров, которые были созданы с использованием предыдущей версии класса?
Комментарии:
1. AFAIK, это не должно, но я недостаточно эксперт, чтобы использовать это в качестве ответа;)
2. Если у вас уже есть код сериализатора, не могли бы вы просто отправить его двум разным классам и сравнить результат самостоятельно?
Ответ №1:
Похоже, что это работает просто отлично…
( XmlSerializer
это моя оболочка для классов сериализации .Net Xml.)
[Test]
public void XmlOutTest()
{
var field = new Field { ExampleField = "TEXT" };
var property = new Property() { ExampleField = "TEXT" };
var fieldXml = XmlSerializer<Field>.Serialize(field);
var propertyXml = XmlSerializer<Property>.Serialize(property);
System.Console.WriteLine(fieldXml);
System.Console.WriteLine(propertyXml);
Assert.IsNotNull(XmlSerializer<Field>.Deserialize(propertyXml));
Assert.IsNotNull(XmlSerializer<Property>.Deserialize(fieldXml));
}
public class Field
{
public string ExampleField = string.Empty;
}
// changing root so I can use each other's xml when deserializing
[System.Xml.Serialization.XmlRoot("Field")]
public class Property
{
public string ExampleField { get; set; }
}
Вывод:
<?xml version="1.0" encoding="utf-16"?>
<Field>
<ExampleField>TEXT</ExampleField>
</Field>
<?xml version="1.0" encoding="utf-16"?>
<Field>
<ExampleField>TEXT</ExampleField>
</Field>