0

Ich habe generische Basisklasse, die Eigenschaft body und eine andere abgeleitete Klasse, die Eigenschaftenheader hat und wenn ich die abgeleitete Klasse in xml Deserialize seine Stelle den Körper als erstes Element zuerst dann header (deserializing in alphabetischer Reihenfolge), aber ich möchte Header zuerst und dann Körper. Ich habe XmlElement Befehl Eigenschaft versucht, aber seine Arbeit nichtWie entscheidet man die Reihenfolge des XML-Elements?

Sample-Klasse:

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

ich eine Lösung sah die besagt, dass die Eigenschaft in der Basisklasse als abstraktes machen und in abgeleiteten Klasse überschreibt dann die Reihenfolge entscheiden, aber ich Ich kann nicht mit dieser Lösung gehen, die meine Basisklasse auch in einigen anderen Projekten verwendet.

+0

dies lesen: http://stackoverflow.com/questions/1018490/net-serialization-ordering –

+0

Yeldar Dank für die Antwort, aber es scheint, dass Ansatz nicht für mich arbeitet. –

Antwort

0

Ich habe das Bestellproblem behoben, indem ich die Vererbung lösche, aber das ist nicht das, was ich erreichen wollte. Alles was ich brauche ist, das xml-Element in der angegebenen Reihenfolge zu bestellen, auch wenn Sie die Vererbungskette verwenden.

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