簡體   English   中英

如何反序列化另一個列表項中存在的xml文件的列表項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM