XMLSerializer - 为什么在序列化时有一个额外的子层?

萨卡

我正在使用 .xml 将复杂的 C# 对象序列化为 XML 文档XMLSerializer我面临的问题是,在序列化之后,我得到了一个不应该存在的额外子容器层。我不确定它是如何被序列化的。我的对象结构如下:

[XmlRoot(ElementName = "order")]
public class order
{
    [XmlElement(ElementName = "orderNumber")]
    public string OrderNumber { get; set; }
    [XmlElement(ElementName = "products")]
    public Products Products { get; set; }
}

[XmlRoot(ElementName = "products")]
public class Products
{
    [XmlElement(ElementName = "product")]
    public List<Product> Product { get; set; }
}

[XmlRoot(ElementName = "product")]
public class Product
{
    [XmlElement(ElementName = "quantity")]
    public decimal Quantity { get; set; }
    [XmlElement(ElementName = "part")]
    public string part { get; set; }
   [XmlElement(ElementName = "unitPrice")]
    public decimal UnitPrice { get; set; }
}

我想将其序列化为订单/产品/产品,但是,它正在序列化为订单/产品/产品/产品:

<order>
  <orderNumber>1</orderNumber>
  <products>
    <product>
      <product>
        <quantity>1</quantity>
        <part>222584</part>
        <unitPrice>5.0</unitPrice>
      </product>
      <product>
        <quantity>5</quantity>
        <part>222</part>
        <unitPrice>1.0</unitPrice>
      </product>
      <product>
        <quantity>15</quantity>
        <part>222244</part>
        <unitPrice>12.0</unitPrice>
      </product>
    </product>
  </products>
</order>
尼兰詹·辛格

要删除产品上的额外标签,那么您的 xml 序列化类应如下所示:

[XmlRoot(ElementName = "order")]
public class order
{
    [XmlElement(ElementName = "orderNumber")]
    public string OrderNumber { get; set; }
    [XmlElement(ElementName = "products")]
    public List<Product> Products { get; set; }
}

编写当前类结构以创建层次结构

[XmlRoot(ElementName = "order")]
    [XmlElement(ElementName = "products")]
        [XmlElement(ElementName = "product")]
             [XmlRoot(ElementName = "product")]<-Final Product data here

下面不需要额外的层,只需在您的订单中直接使用 List。

[XmlRoot(ElementName = "products")]
public class Products
{
    [XmlElement(ElementName = "product")]
    public List<Product> Product { get; set; }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

XmlSerializer在序列化时忽略属性覆盖

XmlSerializer反序列化时间在WCF服务上波动

XmlSerializer:反序列化为XMLElement

XmlSerializer不反序列化DateTime

Javascript使用XMLSerializer序列化CDATA

序列化Protobuf时,XMLSerializer InvalidOperationException

XmlSerializer序列化属性中的一个空整数列表

C# XmlSerializer 序列化具有不同命名空间的同一个类

XMLSerializer正确序列化,但是在反序列化时抛出TargetInvocationException

为什么我不能使用XmlSerializer序列化只读字段?

为什么XmlSerializer无法使用根元素中指定的架构反序列化xml

c# - 在c#中使用XMLSerializer序列化时如何包含具有默认值的属性

XmlSerializer反序列化时将元素名称放入属性中

从字符串反序列化时使用XmlSerializer.CanDeserialize()

XmlSerializer在一个太多关系上的错误

使用 XmlSerializer 将 XML 反序列化为类型

XmlSerializer:反序列化递归对象图

如何使用XmlSerializer序列化派生实例?

如何使用XmlSerializer使用DefaultValueAttribute序列化属性?

使用XmlSerializer反序列化XML的替代方法

使用XmlSerializer反序列化嵌套列表

XmlSerializer不会通过NetworkStream反序列化

不带名称空间的XmlSerializer反序列化列表

为什么XmlSerializer在Visual Studio 2019中不会导致FileNotFoundException?

如何使用XmlSerializer将异构子节点反序列化到集合中?

为什么XmlSerializer无法在.Net Core中序列化枚举值,但是在.NET Framework中可以正常工作

有时C#XmlSerializer序列化(保存)错误,字符数超出预期

如何使XmlSerializer忽略某种类型的所有成员?

指定的模式被调用但没有效果 - 不工作(XmlSerializer)