Нарушает ли рефакторинг XML-сериализуемых общедоступных полей в качестве автоматических свойств десериализацию старых экземпляров?

#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>