2013-06-14 2 views
5

У меня есть класс, определенный как это:C# Xml Почему мой атрибут не появляется?

[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 

Но когда я сериализовать его, «версия» не отображается в атрибуте (в то время как «действие» делает).

Что случилось?

ответ

4

XmlSerializer собирается игнорировать Version, потому что он не имеет set, так что нет никакого способа, он может попытаться когда-либо Deserialize это. Может быть, вместо того, чтобы:

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

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

, который будет иметь тот же эффект в целом (хотя и потребует дополнительное string поля за экземпляр - хотя все "1.0" значений будет тем же фактический string экземпляра через интернирования), но позволит вам правильно записать версию данных десериализация.

Если вы не заботитесь о десериализации, то, возможно, просто не добавить не-оп set:

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

Вы должны установить пустые сеттер. Это ограничение 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 
Смежные вопросы