繁体   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