2

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 に答える