XMLSerializer - 为什么在序列化时有一个额外的子层?
XMLSerializer - Why is there an extra child layer while serializing?
我正在使用 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; }
}
我想将其序列化为 order/products/product,但是,它正在序列化为 order/products/product/product:
<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 序列化 class 应该如下所示:
[XmlRoot(ElementName = "order")]
public class order
{
[XmlElement(ElementName = "orderNumber")]
public string OrderNumber { get; set; }
[XmlElement(ElementName = "products")]
public List<Product> Products { get; set; }
}
当前 class 结构被写入以创建层次结构
[XmlRoot(ElementName = "order")]
[XmlElement(ElementName = "products")]
[XmlElement(ElementName = "product")]
[XmlRoot(ElementName = "product")]<-Final Product data here
不需要下面的额外层,直接在您的订单中使用列表即可。
[XmlRoot(ElementName = "products")]
public class Products
{
[XmlElement(ElementName = "product")]
public List<Product> Product { get; set; }
}
我正在使用 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; }
}
我想将其序列化为 order/products/product,但是,它正在序列化为 order/products/product/product:
<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 序列化 class 应该如下所示:
[XmlRoot(ElementName = "order")]
public class order
{
[XmlElement(ElementName = "orderNumber")]
public string OrderNumber { get; set; }
[XmlElement(ElementName = "products")]
public List<Product> Products { get; set; }
}
当前 class 结构被写入以创建层次结构
[XmlRoot(ElementName = "order")]
[XmlElement(ElementName = "products")]
[XmlElement(ElementName = "product")]
[XmlRoot(ElementName = "product")]<-Final Product data here
不需要下面的额外层,直接在您的订单中使用列表即可。
[XmlRoot(ElementName = "products")]
public class Products
{
[XmlElement(ElementName = "product")]
public List<Product> Product { get; set; }
}