如何确定xml元素的顺序?

时间:2017-05-22 04:12:04

标签: c# xml deserialization xml-serialization xml-deserialization

我有通用基类,它有属性主体和另一个派生类,它有属性头,当我将派生类反序列化为xml时,它首先将主体放置为第一个元素然后是头部(按字母顺序反序列化)但是我想要头首先然后是身体。我已经尝试过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; }
}

我看到一个解决方案,它说基类中的属性为抽象类并在派生类中重写然后决定顺序,但我不能使用这个解决方案,我的基类也用于其他一些项目。 / p>

1 个答案:

答案 0 :(得分:0)

我现在通过删除继承来解决订单问题,但这不是我想要实现的,我所需要的是按照定义的顺序对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; }
}