我有一个像这样定义的类:
[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
但是当我序列化它时,“版本”不会显示在属性中(而“动作”会显示)。
出了什么问题?
答案 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