![](/img/trans.png)
[英]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.