C#Xml为什么我的属性不出现?

时间:2013-06-14 08:43:58

标签: c# xml-serialization xml-attribute

我有一个像这样定义的类:

[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

但是当我序列化它时,“版本”不会显示在属性中(而“动作”会显示)。

出了什么问题?

2 个答案:

答案 0 :(得分:4)

XmlSerializer将忽略Version因为它没有set,所以它无法尝试反序列化它。也许相反:

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

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

总体上会产生相同的效果(尽管每个实例需要额外的string字段 - 尽管所有"1.0"值都是相同的实际string实例,通过< em> interning ),但允许您正确捕获反序列化的数据版本。

如果您不关心关于反序列化,那么可能只需添加一个no-op set

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

答案 1 :(得分:2)

你必须设置一个空的setter。这是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