2013-10-28 101 views
0

我有这样的一个类;XmlSerializer删除多余的父元素

public class Orderinfo 
      { 
       public string billing_company { get; set; } 
       public string delivery_company { get; set; } 
       public string delivery_phone { get; set; } 
       public string orderid { get; set; } 
       public string email_address { get; set; } 
       public string delivery_firstname { get; set; } 
       public string delivery_lastname { get; set; } 
       public string delivery_street_address { get; set; } 
       public string delivery_city { get; set; } 
       public string delivery_state { get; set; } 
       public string delivery_postcode { get; set; } 
       public string giftwrap_type { get; set; } 
       public string billing_firstname { get; set; } 
       public string billing_lastname { get; set; } 
       public string billing_street_address { get; set; } 
       public string billing_city { get; set; } 
       public string billing_state { get; set; } 
       public string billing_postcode { get; set; } 
       public string billing_phone { get; set; } 
       public string transaction_id { get; set; } 
       public string shippingtype { get; set; } 
       public string cc_type { get; set; } 
       public string personal_note { get; set; } 
      } 

      public class Ordertotals 
      { 
       public string shipping { get; set; } 
       public string subtotal { get; set; } 
       public string tax { get; set; } 
       public string discount { get; set; } 
       public string total { get; set; } 
      } 

      public class Product 
      { 
       public string product_id { get; set; } 
       public string product_sku { get; set; } 
       public string product_quantity { get; set; } 
       public string product_price { get; set; } 
       public string product_name { get; set; } 
      } 

      public class Orderproducts 
      { 
       public List<Product> product { get; set; } 
      } 

      public class Order 
      { 
       public Orderinfo orderinfo { get; set; } 
       public Ordertotals ordertotals { get; set; } 
       public Orderproducts orderproducts { get; set; } 
      } 
当我序列此类与下面的函数

;

public class Utf8StringWriter : StringWriter 
     { 
      public override Encoding Encoding 
      { 
       get { return Encoding.UTF8; } 
      } 
     } 
     public static string ToXml(object param) 
     { 
      var stringwriter = new Utf8StringWriter(); 
      var serializer = new XmlSerializer(param.GetType()); 
      serializer.Serialize(stringwriter, param); 
      return stringwriter.ToString(); 
    } 

我收到下面的输出(部分);

<orderproducts> 
    <product> 
     <Product> 
     <product_id>76</product_id> 
     <product_sku>16269</product_sku> 
     <product_quantity>1</product_quantity> 
     <product_price>15.0000</product_price> 
     <product_name>Sesame Street Take along Elmo</product_name> 
     </Product> 
     <Product> 
     <product_id>77</product_id> 
     <product_sku>16999-1219</product_sku> 
     <product_quantity>1</product_quantity> 
     <product_price>20.0000</product_price> 
     <product_name>Buddy the Dog - Red</product_name> 
     </Product> 
    </product> 
    </orderproducts> 

其实我希望产品列表应该从订购产品开始,但它有一个额外的标签覆盖其他产品类别。

有什么办法可以忽略这个标签吗?所以它应该是这样的;

<orderproducts> 
     <Product> 
     <product_id>76</product_id> 
     <product_sku>16269</product_sku> 
     <product_quantity>1</product_quantity> 
     <product_price>15.0000</product_price> 
     <product_name>Sesame Street Take along Elmo</product_name> 
     </Product> 
     <Product> 
     <product_id>77</product_id> 
     <product_sku>16999-1219</product_sku> 
     <product_quantity>1</product_quantity> 
     <product_price>20.0000</product_price> 
     <product_name>Buddy the Dog - Red</product_name> 
     </Product> 
    </orderproducts> 
+0

那么这只是真正的问题表面:你的类'Orderproducts'似乎是多余的。你不能移除它以获得所需的XML格式吗? – BartoszKP

+0

@BartoszKP我发布XML请求的API要求XML应该采用该格式,产品标签必须包含Orderproducts父元素。 –

回答

3

将XmlElement属性添加到Product类将移除Products容器。看到这篇文章在MSDN

+0

Mark-us回答:)谢谢! –