2

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

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

4

1 回答 1

4

这是因为属性不在public您的类中:

[XmlRoot("response")]
public class Response
{
    [XmlAttribute("code")]
    public string Code { get; set; }

    [XmlAttribute("message")]
    public string Message { get; set; }
}

从(重点是我的)的文档中:XmlAttributeAttribute

您只能将 XmlAttributeAttribute 分配给返回值(或值数组)的公共字段或公共属性,该值可映射到 XML 架构定义语言 (XSD) 简单类型之一(包括从 XSD 派生的所有内置数据类型) anySimpleType 类型)。

于 2013-05-02T10:05:35.097 回答