2013-05-02 80 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