XML反序列化后返回单个节点

时间:2013-04-02 15:38:37

标签: c# .net xml-serialization

我有以下xml结构

<root>
 <title>List</title>
 <units>Total Units: 79.0</units>
 <sesgrps>
   <sesgrp>
     <classes>
       <class>
         <subj_area_name>C# language</subj_area_name>
         <class_name>C# Class</class_name>
       </class>
       <class>
         <subj_area_name>VB language</subj_area_name>
         <class_name>VB Class</class_name>
       </class>
       <class>
         <subj_area_name>F# language</subj_area_name>
         <class_name>F# Class</class_name>
       </class>
     </classes>
   </sesgrp>
</sesgrps>

为此,我创建了以下课程:

[Serializable]
[XmlRoot("root")]
public class Data
{
    [XmlElement("title")]
    public string Title { get; set; }

    [XmlElement("units")]
    public string Units { get; set; }

    [XmlArray("sesgrps")]
    [XmlArrayItem("sesgrp")]
    public List<SessionGroup> SessionGroups { get; set; }
}

[Serializable]
public class SessionGroup
{
    [XmlArray("classes")]
    [XmlArrayItem("class")]
    public List<Class> Classes { get; set; }
}

[Serializable]
public class Class
{
   .....................
   .....................
}

当我反序列化时,我只是在Classes集合中获取单个Class项而不是3个类

1 个答案:

答案 0 :(得分:0)

我刚试过以下代码:

var file = new FileStream("Input.txt", FileMode.Open);

var serializer = new XmlSerializer(typeof(Data));
var item = (Data)serializer.Deserialize(file);

使用您的输入XML数据并遵循Class类声明:

[Serializable]
public class Class
{
    [XmlElement("subj_area_name")]
    public string Area { get; set; }

    [XmlElement("class_name")]
    public string Name { get; set; }
}

一切都很好。结果项具有1个SessionGroup实例,其中包含SessionGroups属性,其中包含Class属性中的3个Classes个对象:

enter image description here

所以我不得不说 - XmlSerializer或类声明在这里不是问题。

相关问题