簡體   English   中英

在 c# 中反序列化 xml 的最佳方法?

[英]best way to deserialize xml in c#?

我有以下 xml:

<return_obj from_call_to="categories">
  <categories>
    <category>
      <value>12341234</value>
      <label>First</label>
    </category>
    <category>
      <value>242234234</value>
      <label>Another</label>
    </category>
  </categories>
</return_obj>

所以標記了一個 object 將其序列化為

[XmlRoot(ElementName = "return_obj")]
public class returnobject
{
    [XmlElement]
    public category[] categories { get; set; }
}

public class category
{
    [XmlElement]
    public string value { get; set; }
    [XmlElement]
    public string label { get; set; }
}

並嘗試使用它來做到這一點

    var ser = new XmlSerializer(typeof (returnobject));
    var obj = (returnobject)ser.Deserialize(File.OpenRead("test.xml"));

但是,類別集合總是有些 ups null。

我究竟做錯了什么? 有沒有更好的辦法?

謝謝

class returnobject中公開categories字段。 那會有所幫助。

XmlSerializer 只查看公共字段和屬性,因此您必須在您的returnobject中公開categories

此外,您還必須在您的案例categories中指定要使用的 XML 數組容器的名稱 - 這對我有用:

[XmlRoot(ElementName = "return_obj")]
public class returnobject
{
    [XmlArray("categories")]
    [XmlArrayItem("category")]
    public category[] categories { get; set; }
}

僅供參考,XmlSerializer 必須生成序列化類型的類型信息。 這可能需要一段時間,因此您可能會發現序列化和反序列化需要數百毫秒。 您可以通過運行 SGEN 來預生成序列化程序集來解決此問題。

或者,您可以使用 XmlReader 讀取 XML 並自己編寫序列化代碼。 它的代碼更多,但始終表現良好,並且沒有額外的程序集(無論是否生成)。

暫無
暫無

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

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