2013-06-14 15 views
5

Ich habe eine Klasse wie folgt definiert:C# Xml Warum erscheint mein Attribut nicht?

[XmlRoot(ElementName="request")] 
public class Request 
{ 
    #region Attributes 
    [XmlAttribute(AttributeName = "version")] 
    public string Version 
    { 
     get 
     { 
      return "1.0"; 
     } 
    } 

    [XmlAttribute(AttributeName = "action")] 
    public EAction Action 
    { 
     get; 
     set; 
    } 
    #endregion 

Aber wenn ich es serialisiert „Version“ nicht in dem Attribut auf (während „Aktion“ der Fall ist).

Was läuft falsch?

Antwort

4

XmlSerializer wird Version zu ignorieren, weil es keine set hat, so gibt es keine Möglichkeit, es es jemals deserialize versuchen kann. Vielleicht statt:

[XmlAttribute(AttributeName = "version")] 
public string Version {get;set;} 

public Request() { Version = "1.0"; } 

, die insgesamt die gleiche Wirkung haben werden (obwohl ein zusätzliches string Feld pro Instanz erfordern - obwohl alle der "1.0" Werte werden die gleiche tatsächliche string Instanz sein, über interning), aber ermöglicht es Ihnen, die Version der Daten, die Sie sind deserializing richtig zu erfassen.

Wenn Sie nicht über Deserialisierung egal, dann vielleicht fügen Sie einfach einen No-op set:

[XmlAttribute(AttributeName = "version")] 
public string Version 
{ 
    get { return "1.0"; } 
    set { } 
} 
2

Sie haben eine leere Setter zu setzen. Es ist eine Einschränkung von XmlAttribute.

[XmlRoot(ElementName="request")] 
public class Request 
{ 
    #region Attributes 
    [XmlAttribute(AttributeName = "version")] 
    public string Version 
    { 
     get 
     { 
      return "1.0"; 
     } 
     set{} 
    } 

    [XmlAttribute(AttributeName = "action")] 
    public EAction Action 
    { 
     get; 
     set; 
    } 
    #endregion 
Verwandte Themen