2013-05-02 78 views
0

我有下面的XML,我無法改變:反序列化的XML對象在C#中的列表

<myRoot> 
    <User> 
     <Name>James</Name> 
    </User> 
    <User> 
     <Name>Jill</Name> 
    </User> 
</myRoot 

我創建了一個類來表示此xml:當我反序列化的XML

[XmlRoot("myRoot")] 
public class Users 
{ 
    [XmlElement("User")] 
    List<User> UserList {get;set;} 
} 

public class User 
{ 
    [XmlElement("Name")] 
    string FirstName {get;set;} 
} 

我確實在數組中獲得了適量的記錄。但FirstName始終爲空或爲空。

請幫忙。

+0

加上'[XmlElement的(類型= typeof運算(用戶)的ElementName = 「用戶」)]' – PSL 2013-05-02 03:25:01

+0

製作可序列化的成員公開 – Mahantesh 2013-05-02 03:52:33

回答

1

您需要爲public設置兩個屬性:

[XmlRoot("myRoot")] 
public class Users { 
    [XmlElement("User")] 
    public List<User> UserList {get;set;} 
}  
public class User { 
    [XmlElement("Name")] 
    public string FirstName {get;set;} 
} 

一種更簡便的是擺脫你Users類,它似乎只是一個容器的用戶列表。你可以只定義User類:

public class User { 
    [XmlElement("Name")] 
    public string FirstName { get; set; } 
} 

和反序列化List<User>如下:

XmlSerializer ser = new XmlSerializer(typeof(List<User>), 
             new XmlRootAttribute("myRoot")); 
using (var str = System.IO.File.OpenRead(@"path\to\file")) { 
    List<User> u = (List<User>)ser.Deserialize(str); 
} 
0

嘗試:

添加[Serializable接口]你的用戶和用戶類。

製作名字和用戶列表是公共

+0

'Serializable'與它無關。 – 2013-05-02 03:22:10

+0

讓我的班上班。在我發佈這個問題之後,我注意到了......但無論如何都要感謝。 – Arcadian 2013-05-02 13:43:48