在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。

请帮。

在c#中反序列化XML中的对象列表

您需要将这两个属性设置为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