[英]How to Deserialize a xml file's listed items which is present within another listed items
我有一个具有以下格式的自动生成的xml文件。
<?xml version="1.0"?>
<School>
<Classes numberOfFields="5">
<Class name="10" dataType="double">
<Section value="A"/>
<Section value="B"/>
<Section value="C"/>
</Class>
<Class dataType="double"/>
<Class dataType="double"/>
<Class dataType="double"/>
<Class dataType="double"/>
</Classes>
</School>
我使用“ XmlDeserializer”反序列化如下
School schoolResult = (School)xmlSerializer.Deserialize(stream);
XmlRootElement在“类”标签下包含“类”的集合,并且每个“类”还将包含“部分”的集合。
在C#中,我已经声明要像这样将“类”反序列化为类列表。
[XmlArray("Classes")]
[XmlArrayItem("Class", typeof(Class))]
public List<Class> Classes {};
现在,为了进一步将类反序列化为部分列表,我添加了以下代码。
[XmlArray("Class")]
[XmlArrayItem(ElementName="Section")]
public List<Section> ClassSections {};
我的问题是我无法正确获取“节列表”值 。 因为我在第一部分和第二部分中都将“ Class”作为类名,所以我提到了与“ Array”元素相同的“ Class”。 因此,谁能说出如何使用“ XmlSerializer”正确反序列化“ School”对象以正确获取所有值。
注意:我不能 在“ Class”下有Array根标签,例如“ Sections” 。 因为我的xml文档是自动生成的。 我无法指定自己的格式。
谢谢...
尝试这个 :
public class School
{
[XmlAttribute]
public int numberOfFields { get; set; }
[XmlArray("Classes")]
[XmlArrayItem("Class", typeof(Class))]
public List<Class> Classes { get; set; }
}
public class Class
{
[XmlAttribute]
public string name { get; set; }
[XmlAttribute]
public string dataType { get; set; }
[XmlElement("Section")]
public List<Section> ClassSections { get; set; }
}
public class Section
{
[XmlAttribute]
public string value { get; set; }
}
*编辑#1 **
---------------由于NumberOfFields而导致的更新结构未读取----------------
我认为这不是正确的结构,但是当您说这是一个自动生成的XML文件时,我认为这是最简单的读取方法。
public class School
{
[XmlElement("Classes")]
public List<ArrayClass> Classes { get; set; }
}
public class ArrayClass
{
[XmlAttribute]
public int numberOfFields { get; set; }
[XmlElement("Class")]
public List<Class> Class { get; set; }
}
static void Main(string[] args)
{
var xml ="<?xml version=\"1.0\"?><School><Classes numberOfFields=\"5\"><Class name=\"10\" dataType=\"double\"><Section value=\"A\"/><Section value=\"B\"/><Section value=\"C\"/></Class><Class dataType=\"double\"/><Class dataType=\"double\"/><Class dataType=\"double\"/><Class dataType=\"double\"/></Classes></School>";
School result;
var serializer = new XmlSerializer(typeof(School));
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
using (var reader = new XmlNodeReader(xmlDoc))
{
result = (School)serializer.Deserialize(reader);
}
}
public class School
{
[XmlArray("Classes")]
[XmlArrayItem("Class")]
public List<Class> Classes { get; set; }
}
public class Class
{
[XmlElement("Section")]
public List<Section> ClassSections { get; set; }
}
public class Section
{
[XmlAttribute("value")]
public string Value { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.