我有以下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>
标记了一个对象,将其序列化为
[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"));
但是,类别集合总是有些为空。
我做错了什么?还有更好的方法吗?
由于
答案 0 :(得分:2)
在categories
中公开class returnobject
字段。那会有所帮助。
答案 1 :(得分:1)
XmlSerializer仅查看公共字段和属性,因此您必须在categories
类中公开returnobject
。
此外,您必须指定要使用的XML数组容器的名称,在您的情况下categories
- 这对我有用:
[XmlRoot(ElementName = "return_obj")]
public class returnobject
{
[XmlArray("categories")]
[XmlArrayItem("category")]
public category[] categories { get; set; }
}
答案 2 :(得分:0)
仅供参考,XmlSerializer必须生成序列化类型的类型信息。这可能需要一段时间,因此您可能会发现序列化和反序列化需要几百毫秒。您可以通过运行SGEN来预先生成序列化程序集来解决这个问题。
或者,您可以使用XmlReader读取XML并自己编写序列化代码。这是更多的代码,但总是表现良好,并没有额外的组件负担(生成或不生成)。