当前位置: 首页 > 知识库问答 >
问题:

如何反序列化xml

邓令雪
2023-03-14

我加载xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<OrderHeadUpload xmlns="http://www.sample-package.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Number>Z-00006453580748</Number>
    <Number_confirm>000033477</Number_confirm>
    <Positions>
        <id>168816</Product_id>
        <Tare_id>2442</Tare_id>
    </Positions>
</OrderHeadUpload>

使2类

 [XmlRoot(ElementName = "Head", Namespace = "http://www.sample-package.org")]
    public class OrderHeadUpload
    {
        [XmlElement(ElementName = "Number_confirm", Namespace = "http://www.sample-package.org")]
        public string Client_id { get; set; }
        [XmlElement(ElementName = "Number", Namespace = "http://www.sample-package.org")]
        public string Barcode_id { get; set; }
    }

[XmlRoot(ElementName = "Positions", Namespace = "http://www.sample-package.org")]
    public class Positions
    {
        [XmlElement(ElementName = "id", Namespace = "http://www.sample-package.org")]
        public string id { get; set; }
        [XmlElement(ElementName = "Tare_id", Namespace = "http://www.sample-package.org")]
        public string  Tare_id {get; set;}
    }

我加载xml文件(temp.xml),然后序列化类2位置和头然后StringReader,它从文件中读取字符串,然后var位置=(位置)序列化器。反序列化(读取器);类序列化成为反序列化

    doc.Load(temp);

    XmlSerializer serializer = new XmlSerializer(typeof(Positions));
    XmlSerializer serializer2 = new XmlSerializer(typeof(Head));

    StringReader reader = new StringReader(temp);

    var position = (Positions)serializer.Deserialize(reader);
    var Head = (OrderHeadUpload)serializer2.Deserialize(reader);

但我看到error error msg在XML文档中有一个错误(1,1)。哪里?:at系统。Xml。序列化。XmlSerializer。在系统上反序列化(XmlReader XmlReader、String encodingStyle、XmlDeserializationEvents和events)。Xml。序列化。XmlSerializer。在处反序列化(TextReader TextReader)。cs:第64行(var position=(Positions)序列化程序。反序列化(读取器);)

如何正确地反序列化这个xml?

共有1个答案

耿珂
2023-03-14

尝试:

[XmlRoot(ElementName = "Positions", Namespace = "http://www.sample-package.org")]
public class Positions
{
    [XmlElement(ElementName = "id", Namespace = "http://www.sample-package.org")]
    public string id { get; set; }
    [XmlElement(ElementName = "Tare_id", Namespace = "http://www.sample-package.org")]
    public string Tare_id { get; set; }
}

[XmlRoot(ElementName = "Head", Namespace = "http://www.sample-package.org")]
public class OrderHeadUpload
{
    [XmlElement(ElementName = "Number_confirm", Namespace = "http://www.sample-package.org")]
    public string Client_id { get; set; }
    [XmlElement(ElementName = "Number", Namespace = "http://www.sample-package.org")]
    public string Barcode_id { get; set; }

    [XmlElement(ElementName = "Positions")]
    public Positions positions;
}

使用:

var order = (OrderHeadUpload)serializer.Deserialize(reader);

您只需使用OrderHeadUpload反序列化一次。如果您有多个职位,可以像列表一样声明

 类似资料:
  • 问题内容: 我一直在尝试将对象序列化为CSV,但是该对象包含,并且不能在对象上使用。 预期样本输出 : 实际输出 : 这是我的代码 :(其中大多数是2个POJO) 我尝试的一切似乎都没有任何效果,但找不到有效的解决方案。 抱歉,我无缘无故留下的毫无意义的注释,如果您回答了代码,请随时删除它们。 问题答案: 从错误中,我想相信这与您的模式有关,该模式的列取自on 而不是值。 您可能想在其中添加,但是

  • 问题内容: 我正在尝试使用Northwind OData服务: http://services.odata.org/V3/OData/OData.svc/Products?$format=json 并将其反序列化为一系列产品: 但是序列化器似乎不喜欢该部分,并且事实是那里有2 条记录(不确定它们是什么)。 是否有捷径可寻? 问题答案: 使用Json.Net

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场

  • 问题内容: 使用,我可以将其发送到PHP页面。现在如何在PHP中反序列化它?它已在jQuery中序列化。 问题答案: 您无需从jquery 方法反序列化PHP中的任何内容。如果对数据进行序列化,则如果使用GET方法ajax请求,则应将其作为查询参数发送给PHP;如果使用POST ajax请求,则应将其作为vars发送。因此,在PHP中,您将访问类似或取决于请求类型的值。 该方法仅采用表单元素并将其

  • 我有一个kdtree,其节点由以下字段组成:公共静态类节点实现可序列化{ 其中DataPoint定义: 公共静态类DataPoint实现可序列化{公共可比X;公共可比Y;公共可比Z; 我想序列化树,存储在文件中并在回答范围查询时反序列化。我对这个概念od序列化的理解并不好。从我收集的任何内容中,我编写了以下函数,但不起作用。有人能帮忙吗?

  • 我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?