在c#中反序列化XML中的对象列表
本文关键字:对象 列表 反序列化 XML | 更新日期: 2023-09-27 18:11:40
我有以下无法更改的Xml:
<myRoot>
<User>
<Name>James</Name>
</User>
<User>
<Name>Jill</Name>
</User>
</myRoot
我创建了一个类来表示这个xml:
[XmlRoot("myRoot")]
public class Users
{
[XmlElement("User")]
List<User> UserList {get;set;}
}
public class User
{
[XmlElement("Name")]
string FirstName {get;set;}
}
当我反序列化xml时,我确实得到了数组中正确数量的记录。但是FirstName总是为空或null。
请帮。
您需要将这两个属性设置为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);
}
尝试:
添加[Serializable]到你的Users和User类。
使FirstName和UserList为public