2013-06-14 13 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は、それがsetを持っていないためVersionを無視しようとしているので、それは今までにデシリアライズそれを試みることができる方法はありません。おそらく代わりに:全体と同じ効果を有するであろう

[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