2013-05-02 79 views
2

我有一個簡單的類具有兩個屬性:爲什麼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是否錯誤?

回答

4

這是因爲這些屬性在您的類不public

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

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

documentationXmlAttributeAttribute(重點是我的):

您可以分配XmlAttributeAttribute 只有公共領域或公共屬性,它們返回可以映射到XML模式定義語言(XSD)之一的簡單類型(包括所有內置數據類型)的值(或值的數組)來自XSD anySimpleType類型)。

+0

明顯!謝謝 :)。我一直在盯着代碼,現在用Google搜索了半個小時。一旦啓用,我會盡快接受答案。 – 2013-05-02 10:07:03

相關問題