Как определить порядок элемента xml?

У меня есть общий базовый класс, который имеет тело свойства и другой производный класс, который имеет заголовок свойства, и когда я десериализую производный класс в xml, он сначала помещает тело в качестве первого элемента, затем заголовка (десериализация в алфавитном порядке), но я хочу сначала заголовок, а затем тело . Я пробовал свойство order XmlElement, но оно не работает

Образец класса:

[XmlRoot("BaseClass", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class BaseClass<T>
{
   public T Body { get; set; }
}

[XmlRoot("DerivedClass", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class DerivedClass<THeader, TBody> : BaseClass<TBody>
where THeader : IEnvelopeHeader where TBody : class, IEnvelopeBody, new()
{
    public THeader Header { get; set; }
}

Я видел одно решение, в котором говорится, что сделать свойство в базовом классе абстрактным и переопределить в производном классе, а затем определить порядок, но я не могу использовать это решение, которое мой базовый класс также используется в некоторых других проектах.


person Sudama Tripathi    schedule 22.05.2017    source источник
comment
Прочтите это: stackoverflow.com/questions/1018490/net-serialization-ordering   -  person Yeldar Kurmangaliyev    schedule 22.05.2017
comment
Елдар благодарит за ответ, но мне кажется, что этот подход не работает.   -  person Sudama Tripathi    schedule 22.05.2017


Ответы (1)


На данный момент я исправил проблему с порядком, удалив наследование, но это не то, чего я хотел достичь. Все, что мне нужно, это заказать элемент xml в соответствии с порядком, определенным, даже когда вы используете цепочку наследования.

[XmlRoot("Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope<THeader, TBody>
where THeader : IEnvelopeHeader where TBody : class, IEnvelopeBody, new()
{
    [XmlElement(ElementName = "Header", Order = 1)]
    public THeader Header { get; set; }

    [XmlElement(ElementName = "Body", Order = 2)]
    public TBody Body { get; set; }
}
person Sudama Tripathi    schedule 23.05.2017