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

XMLSerializer-为什么序列化时会有额外的子层?,xml,xmlserializer,Xml,Xmlserializer,我正在使用XMLSerializer将复杂的C#对象序列化为XML文档。我面临的问题是,在序列化之后,我得到了一个额外的子容器层,它不应该在那里。我不确定它是如何被序列化为的。我的对象结构如下: [XmlRoot(ElementName = "order")] public class order { [XmlElement(ElementName = "orderNumber")] public string OrderNumber { get; set; } [Xml

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

[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; }
}
[XmlRoot(ElementName=“order”)]
公共阶级秩序
{
[xmlement(ElementName=“orderNumber”)]
公共字符串OrderNumber{get;set;}
[xmlement(ElementName=“products”)]
公共产品产品{get;set;}
}
[XmlRoot(ElementName=“products”)]
公共类产品
{
[XmlElement(ElementName=“产品”)]
公共列表产品{get;set;}
}
[XmlRoot(ElementName=“产品”)]
公共类产品
{
[xmlement(ElementName=“数量”)]
公共十进制数量{get;set;}
[xmlement(ElementName=“part”)]
公共字符串部分{get;set;}
[xmlement(ElementName=“单价”)]
公共十进制单价{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>

1.
1.
222584
5
5.
222
1
15
222244
12

要删除产品上的额外标记,则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”)]
公共阶级秩序
{
[xmlement(ElementName=“orderNumber”)]
公共字符串OrderNumber{get;set;}
[xmlement(ElementName=“products”)]
公共列表产品{get;set;}
}
编写当前类结构是为了创建层次结构

[XmlRoot(ElementName = "order")]
    [XmlElement(ElementName = "products")]
        [XmlElement(ElementName = "product")]
             [XmlRoot(ElementName = "product")]<-Final Product data here
[XmlRoot(ElementName=“order”)]
[xmlement(ElementName=“products”)]
[XmlElement(ElementName=“产品”)]

[XmlRoot(ElementName=“product”)]为什么您甚至有一个
产品类?省略它,您可以直接在
订单
-类中使用
列表
。@HimBromBeere因为这是我试图创建的XML结构:order/products/products将元素定义为
public List products{get;set;}
,并删除额外的类将其修复。谢谢
[XmlRoot(ElementName = "products")]
public class Products
{
    [XmlElement(ElementName = "product")]
    public List<Product> Product { get; set; }
}