c# Xml为什么不'

本文关键字:为什么不 Xml | 更新日期: 2023-09-27 18:18:16

我有一个这样定义的类:

[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

但是当我序列化它时,"version"没有出现在属性中(而"action"出现了)。

怎么了?

c# Xml为什么不'

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

[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 { }
}

必须设置一个空的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