我有一个包含两个属性的简单类:
[XmlRoot("response")]
public class Response
{
[XmlAttribute("code")]
string Code { get; set; }
[XmlAttribute("message")]
string Message { get; set; }
}
我尝试使用XmlSerializer反序列化XML字符串:
static void Main(string[] args)
{
string xml = "<response code=\"a\" message=\"b\" />";
using(var ms = new MemoryStream())
using(var sw = new StreamWriter(ms))
{
sw.Write(xml);
sw.Flush();
ms.Position = 0;
XmlSerializer ser = new XmlSerializer(typeof(Response));
ser.UnknownAttribute += new XmlAttributeEventHandler(ser_UnknownAttribute);
var obj = ser.Deserialize(ms);
}
}
static void ser_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
throw new NotImplementedException();
}
UnknownAttribute
事件被code
属性触发,它不会被反序列化。
这是什么原因?我使用的是XmlAttributeAttribute错误吗?
答案 0 :(得分:4)
这是因为您的班级中的属性不是public
:
[XmlRoot("response")]
public class Response
{
[XmlAttribute("code")]
public string Code { get; set; }
[XmlAttribute("message")]
public string Message { get; set; }
}
来自XmlAttributeAttribute
的{{3}}(重点是我的):
您可以将XmlAttributeAttribute 仅分配给公共字段或公共属性,它们返回可以映射到XML架构定义语言(XSD)简单类型之一的值(或值数组)(包括从XSD anySimpleType类型派生的所有内置数据类型。)