簡體   English   中英

將XML反序列化為對象數組

[英]Deserialize XML to Object Array

我正在嘗試將XML文件反序列化為對象數組,但是我收到的是空對象。 我的問題類似於以下內容: 如何將xml反序列化為對象數組? 但我似乎無法創建一個繼承IXmlSerializable的類。 就是說,我認為這種方法不是必需的。

難道我做錯了什么?

文件對象

 [XmlType("file")]
    public class File
    {
        [XmlElement("id")]
        public string Id { get; set; }

        [XmlElement("company_name")]
        public string Company_Name { get; set; }

        [XmlElement("docs")]
        public HashSet<doc> Docs { get; set; }
    }

文件對象

 [XmlType("doc")]
    public class Doc
    {
        [XmlElement("valA")]
        public string ValA { get; set; }

        [XmlElement("valB")]
        public string ValB { get; set; }
    }

XML格式

<?xml version="1.0" encoding="UTF-8"?>
  <files>
    <file>
      <id>12345</id>
      <company_name>Apple</company_name>
      <docs>
       <doc>
          <valA>Info</valA>
          <valB>More Info</valB>
       </doc>  
      </docs>
    </file>
    <file>
      <id>12345</id>
      <company_name>Microsoft</company_name>
      <docs>
       <doc>
          <valA>Even More Info</valA>
          <valB>Lots of it</valB>
       </doc>  
      </docs>
    </file>
  </files>

反序列化代碼

XmlSerializer mySerializer = new XmlSerializer(typeof(File[]), new XmlRootAttribute("files"));
using (FileStream myFileStream = new FileStream("Files.xml", FileMode.Open))
{
    File[] r;
    r = (File[])mySerializer.Deserialize(myFileStream);
}

您已經用XMLAttribute裝飾了屬性,但是它們是XML中的元素。 因此,將所有XMLAttribute更改為XmlElement

[XmlType("file")]
public class File
{
    [XmlElement("id")]
    public string Id { get; set; }

    [XmlElement("company_name")]
    public string Company_Id { get; set; }

    [XmlArray("docs")]
    public HashSet<Doc> Docs { get; set; }
}

[XmlType("doc")]
public class Doc
{
    [XmlElement("valA")]
    public string ValA { get; set; }

    [XmlElement("valB")]
    public string ValB { get; set; }
}

而且您的XML格式不正確。 我想這是錯別字-

<company_name>Apple</company_id>
<company_name>Microsoft</company_id>

結束標記應為company_name

<company_name>Apple</company_name>
<company_name>Microsoft</company_name>

我會使用xml解析器。

XDocument doc=XDocument.Load(url);
File[] r=doc.Elements("file")
            .Select(f=>
             new File
             {
                  Id=f.Element("id").Value,
                  Company_Id=f.Element("company_name").Value,
                  Docs=new HashSet<Docs>(
                       f.Elements("docs")
                        .Elements("doc")
                        .Select(d=>
                              new Doc
                              {
                                   ValA=d.Element("valA").Value,
                                   ValB=d.Element("valB").Value
                              }))
                }).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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