[英]Best way to serialize and deserialize XML in C# so as to reuse the XML file, model class, and UserControl
[英]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.