У меня есть класс настроек, который сохраняется с использованием сериализации DataContract. Теперь я хочу извлечь некоторые свойства в базовый класс, но это изменяет порядок записей в сгенерированном xml и разрывает десериализацию. Я нашел это удивительным, поскольку все поля и имя класса одинаковы. Каков самый простой способ прочитать старые файлы в новой структуре?Как извлечь базовый класс из класса, который использует DataContractAttribute, не внося изменения?
Редактировать: установка заказа не работает. Базовые параметры класса всегда на первом месте, за ними следуют производные члены.
например.
[DataContract]
public class MyClass
{
[DataMember]
public string A { get; set; }
[DataMember]
public string B { get; set; }
[DataMember]
public string C { get; set; }
}
Это выводит Params в порядке A, B, C
Теперь, если я сделаю это
[DataContract]
public abstract class MyBaseClass
{
[DataMember]
public string C { get; set; }
}
[DataContract]
public class MyClass : MyBaseClass
{
[DataMember]
public string A { get; set; }
[DataMember]
public string B { get; set; }
}
заказ будет C, A, B
. C
будет первым, независимо от того, что я поставил для заказа.
Согласно [документации] (https://msdn.microsoft.com/en-us/library/ms729813%28v=vs.110%29.aspx), база-первый порядок элементов данных не может быть переопределено ['[DataMember (Order = xxx)]'] (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.order (v = vs.110) .aspx). Возможно, вам придется использовать [Surrogat Data Contract Surrogate] (https://msdn.microsoft.com/en-us/library/ms733064%28v=vs.110%29.aspx) или реализовать 'ISerializable'. – dbc