如何在 C# 中仅反序列化 XML 文档的一部分

2023-12-28

这是我试图解决的问题的一个虚构示例。如果我使用 C# 工作,并且有这样的 XML:

<?xml version="1.0" encoding="utf-8"?>
<Cars>
  <Car>
    <StockNumber>1020</StockNumber>
    <Make>Nissan</Make>
    <Model>Sentra</Model>
  </Car>
  <Car>
    <StockNumber>1010</StockNumber>
    <Make>Toyota</Make>
    <Model>Corolla</Model>
  </Car>
  <SalesPerson>
    <Company>Acme Sales</Company>
    <Position>
       <Salary>
          <Amount>1000</Amount>
          <Unit>Dollars</Unit>
    ... and on... and on....
  </SalesPerson>
</Cars>

SalesPerson 中的 XML 可能非常长,达到兆字节大小。我想反序列化标签,but不要反序列化 SalesPerson XML 元素,而是将其保留为原始形式“供以后使用”。

本质上,我希望能够使用它作为 XML 的对象表示。

[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
    [XmlArrayItem(typeof(Car))]
    public Car[] Car { get; set; }

    public Stream SalesPerson { get; set; }
}

public class Car
{
    [System.Xml.Serialization.XmlElementAttribute("StockNumber")]
    public string StockNumber{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Make")]
    public string Make{ get; set; }

    [System.Xml.Serialization.XmlElementAttribute("Model")]
    public string Model{ get; set; }
}

其中 Cars 对象上的 SalesPerson 属性将包含一个带有原始 xml 的流,该原始 xml 在通过 XmlSerializer 运行后位于 xml 元素内。

这可以做到吗?我可以选择仅反序列化 xml 文档的“部分”吗?

谢谢! -麦克风

附注示例 xml 被盗如何反序列化 XML 文档 https://stackoverflow.com/questions/364253/how-to-deserialize-xml-document


它可能有点旧,但无论如何我都会发布。我遇到了同样的问题(需要从超过 1MB 的文件中反序列化 10kb 的数据)。在主对象(其中有一个需要反序列化器的 InnerObject)中,我实现了 IXmlSerialized 接口,然后更改了 ReadXml 方法。

我们有 xmlTextReader 作为输入,第一行是读取 XML 标签:

reader.ReadToDescendant("InnerObjectTag"); //tag which matches the InnerObject

然后为我们要反序列化的对象类型创建XMLSerializer并反序列化

XmlSerializer   serializer = new XmlSerializer(typeof(InnerObject));

this.innerObject = serializer.Deserialize(reader.ReadSubtree()); //this gives serializer the part of XML that is for  the innerObject data

reader.close(); //now skip the rest 

这节省了我大量的反序列化时间,并且允许我仅读取 XML 的一部分(仅描述文件的一些详细信息,这可能有助于用户确定该文件是否是他想要加载的文件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中仅反序列化 XML 文档的一部分 的相关文章

随机推荐