簡體   English   中英

我如何反序列化這個xml?

[英]how do i deserialize this xml?

我需要反序列化下面的xml。 我想使用xmlserializer,因為我(更)熟悉它。 我相信這個xml沒有正確構造,但我不能改變它。 下面代表一個類別對象列表。 當我嘗試反序列化時使用

xmlserializer(typeof(List<Category>))

我收到此錯誤:“類別xmlns =''不是預期的”

<?xml version="1.0" encoding="utf-8" ?>
<categories>
  <category id="16" name="Exports" parent_id="13"/>
  <category id="17" name="Imports" parent_id="13"/>
  <category id="3000" name="Income Payments & Receipts" parent_id="13"/>
  <category id="125" name="Trade Balance" parent_id="13"/>
  <category id="127" name="U.S. International Finance" parent_id="13"/>
</categories>

如果這是我必須做的事情,我不介意制作某種虛擬課程來去除它們。 這是我的分類

[XmlType("category")]
 public class Category
 {


    [XmlAttribute("id")]
    public int ID { get; set; }

    [XmlAttribute("parent_id")]
    public int ParentID { get; set; }

    [XmlAttribute("name")]
    public string Name { get; set; }
}

我的代碼:

    XmlSerializer serializer = new XmlSerializer(typeof(List<Category>));
    StringReader reader = new StringReader(xml);
    List<Category> obj = null;

    using (System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(reader))
    {
        obj = (List<Category>)serializer.Deserialize(xmlReader);
    }
        return obj;

您只需將XmlRootAttribute傳遞給“類別”部分的序列化程序即可。

但是......你必須從xml中刪除“&”,因為它無效

XmlSerializer serializer = new XmlSerializer(typeof(List<Category>), new XmlRootAttribute("categories"));

using (FileStream fileStream = new FileStream(@"C:\Test.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
    var test = serializer.Deserialize(fileStream);
}

在此輸入圖像描述

這是使用String.Replace來排序“&”的方法

    private List<Category> GetCategories(string xmlData)
    {
        List<Category> obj = null;
        XmlSerializer serializer = new XmlSerializer(typeof(List<Category>), new XmlRootAttribute("categories"));
        StringReader reader = new StringReader(xmlData.Replace("&","&amp;"));
        using (System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(reader))
        {
            obj = (List<Category>)serializer.Deserialize(xmlReader);
        }
        return obj;
    }

嘗試創建一個包含List<Category>的類別類,如下所示:

[XmlRoot("categories")]
public class Categories
{
    public Categories() 
    {
       Items = new List<User>();
    }

    [XmlElement("category")]
    public List<Category> Items {get;set;}
}

你可以創建一個像這樣的序列化器:

XmlSerializer serializer = new XmlSerializer(typeof(Categories));

你有一個這個XML應該符合的XSD嗎? 如果是這樣,您可以使用以下命令生成所需的代碼:“xsd your.xsd / classes”

暫無
暫無

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

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