将XML转换为对象C#

时间:2017-11-29 20:43:14

标签: c# xml

我有像这样的xml:

<Person>
  <Person>
    <Name>Asd</Name>
    <Surname>Dsa/Surname>
    <City>ASdasd</City>
  </Person>
  <Person>
    <Name>Asadas</Name>
    <Surname>Dsadsad</Surname>
    <City>dsadsa</City>
  </Person>
</Person>

班主任:

  public class Person
    {
        public string Name{ get; set; }
        public string Surname{ get; set; }
        public string City { get ; set; }

    }

功能: public static void

SendTheLoadedPerson(ObservableCollection<ObservableCollection<Person>> list)
{
XmlRootAttribute oRootAttr = new XmlRootAttribute();
            XDocument doc = XDocument.Parse(path);
            var pepoleList= (from r in doc.Root.Elements("Person")
                         select new Person()
                         {
                             Name = (string)r.Element("Name"),
                             Surname = (string)r.Element("Surname"),
                             City = (string)r.Element("City")

                         }).ToList();
}

我想将每个人添加到列表ObservableCollection&gt;名单 但是一旦我不知道如何做到这一点,而且pepoleList返回空 请你告诉我任何提示? 我的案例与其他案例不同,因为我有ObservableCollection&gt;列出其他人只有对象列表

1 个答案:

答案 0 :(得分:0)

实际上,我认为您的XML中存在拼写错误,这使得正确解析变得棘手:

<!-- Persons maybe, not Person... -->
<Persons> 
  <Person>
    <Name>Asd</Name>
    <Surname>Dsa/Surname>
    <City>ASdasd</City>
  </Person>
  <Person>
    <Name>Asadas</Name>
    <Surname>Dsadsad</Surname>
    <City>dsadsa</City>
  </Person>
</Persons>

从该假设开始,定义您的类(包括根标签):

[XmlRoot("Persons")]
public class Persons
{
    [XmlElement("Person")]
    public List<Person> Persons { get; set; }
}

public class Person
{
    [XmlElement("Name")]
    public String Name { get; set; }

    [XmlElement("Surname")]
    public String Surname { get; set; }

    [XmlElement("City")]
    public String City { get; set; }
}

并反序列化您的文件:

Persons persons = null;
XmlSerializer serializer = new XmlSerializer(typeof(Persons));

using (FileStream stream = new FileStream(@"C:\Path\To\File\MyXML.xml",FileMode.Open)) 
    persons = (Persons)serializer.Deserialize(stream);