0

Je possède une classe de base générique qui possède un en-tête de propriété et une classe dérivée en xml qui place le corps en premier en premier puis en en-tête (désérialisant par ordre alphabétique) alors Corps. J'ai essayé la propriété de l'ordre de XmlElement mais sa ne fonctionne pasComment décider de l'ordre de l'élément xml?

classe Sample:

[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; } 
} 

je vis une solution qui dit que rendre la propriété dans la classe de base comme abstraite et le remplacement dans la classe dérivée alors décider de l'ordre, mais je Je ne peux pas aller avec cette solution que ma classe de base est utilisée dans d'autres projets.

+0

Lire ceci: http://stackoverflow.com/questions/1018490/net-serialization-ordering –

+0

Yeldar merci pour la réponse, mais il semble que cette approche ne fonctionne pas pour moi. –

Répondre

0

J'ai résolu le problème de commande pour l'instant en supprimant l'héritage mais ce n'est pas ce que je voulais réaliser. Tout ce dont j'ai besoin est de commander l'élément xml selon l'ordre défini même lorsque vous utilisez la chaîne d'héritage.

[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; } 
}