2010-11-23 55 views
0

我有一個XML字符串這樣的:爲什麼將XML反序列化爲Object返回null值?

<?xml version="1.0" ?> 
<result> 
<vmeet_id>7121</vmeet_id> 
<username>MT_Hue_QuangBinh_QuangTri</username> 
<email></email> 
<begin_date>2010-04-21 08:53</begin_date> 
<expiry_date>2010-12-21 00:00</expiry_date> 
<point></point> 
<info>OK</info> 
</result> 

我想將它反序列化爲一個對象,所以我創造了這個類:

[Serializable] 
[XmlRoot(ElementName = "result", IsNullable = false)] 
public class UserInfo 
{ 
    [XmlAttribute("vmeet_id")] 
    public int UserID { get; set; } 
    [XmlAttribute("username")] 
    public string Username { get; set; } 
    [XmlAttribute("email")] 
    public string Email { get; set; } 
    [XmlAttribute("begin_date")] 
    public DateTime BeginDate { get; set; } 
    [XmlAttribute("expiry_date")] 
    public DateTime ExpiryDate { get; set; } 
    [XmlAttribute("point")] 
    public string Point { get; set; } 
    [XmlAttribute("info")] 
    public string Info { get; set; } 
} 

,然後使用此代碼進行反序列化:

var deserializer = new XmlSerializer(typeof(UserInfo)); 
     using (var stream = new StringReader(result)) 
     { 
      UserInfo userInfo = (UserInfo)deserializer.Deserialize(stream); 
      return userInfo; 
     } 

返回值不爲null,但其所有屬性爲空值:

<result vmeet_id="0" begin_date="0001-01-01T00:00:00" expiry_date="0001-01-01T00:00:00"/> 

這裏有什麼問題?我忘了什麼嗎?

謝謝。

+1

附註:如果您有一塊XML;您可以使用xsd.exe命令行工具生成XML模式,並在第二步中使用該XML中的C#類,該類將能夠將該XML反序列化爲C#類。只是一個想法...而不是很多小時的手工編碼 - 只需調用xsd.exe兩次 - 就完成了! – 2010-11-23 06:18:28

回答

7

在您的XML中,所有'vmeet''begin_date'全部爲elements,但在您的UserInfo類中,您聲明它們爲XMLAttribute。嘗試將它們更改爲XMLElement應該有所幫助。

+0

謝謝,我會試試:) – Vimvq1987 2010-11-23 03:32:57