5

次のように定義されたクラスがあります。

[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

2 に答える 2

4

XmlSerializerがないため無視するVersionため、逆シリアルset化を試みることはできません。おそらく代わりに:

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

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

これにより、全体的に同じ効果が得られます (ただし、stringインスタンスごとに追加のフィールドが必要になりますが、すべての値はinterningを介し"1.0"て同じ実際のインスタンスになります) 。string

逆シリアル化を気にしない場合は、 no-op を追加するだけsetです:

[XmlAttribute(AttributeName = "version")]
public string Version
{
    get { return "1.0"; }
    set { }
}
于 2013-06-14T08:48:46.607 に答える
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
于 2013-06-14T08:49:11.180 に答える