为什么XmlSerializer不能识别这个属性?

时间:2013-05-02 10:01:18

标签: c# xml xml-serialization xmlserializer

我有一个包含两个属性的简单类:

[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错误吗?

1 个答案:

答案 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类型派生的所有内置数据类型。)