输出Customer->Orders->Order时如何使用XmlSerializer去除级别Orders

How to use XmlSerializer to remove the level Orders when outputting Customer->Orders->Order

我正在寻找解决以下问题的建议: 我需要在序列化输出时从 XML 中删除一个级别。 (删除 "Orders" 级别) 我正在使用 ASP.NET 4.6 和 C#。 (不是选择)

这是期望的输出

<?xml version="1.0"?>
<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Fred Flinstone</Name>
    <Order>
      <Description>Cookies</Description>
    </Order>
    <Order>
      <Description>Ice Cream</Description>
    </Order>
</Customer>

这里是当前输出

<?xml version="1.0"?>
<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Fred Flinstone</Name>
  <Orders>
    <Order>
      <Description>Cookies</Description>
    </Order>
    <Order>
      <Description>Ice Cream</Description>
    </Order>
  </Orders>
</Customer>

这是我使用的代码

using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

public static class Test
{
    static void Main()
    {
        string fileName = "dataStuff.txt";
        Test.SerializeItem(fileName); 
    }

    public static void SerializeItem(string fileName)
    {
        var c = new Customer();
        c.Name = "Fred Flinstone";
        c.Orders = new List<Order>();

        var order = new Order();
        order.Description = "Cookies";
        c.Orders.Add(order);

        order = new Order();
        order.Description = "Ice Cream";
        c.Orders.Add(order);

        FileStream s = new FileStream(fileName, FileMode.Create);
        XmlSerializer oSerialiser = new XmlSerializer(typeof(Customer));
        oSerialiser.Serialize(s, c);
        s.Close();
    }
}

public class Customer
{
    public string Name { get; set; }
    public List<Order> Orders{ get; set; }
}

public class Order
{
    public string Description { get; set;  }
}

感谢您的建议。

为什么一定要加一堆乱码提交?我想成为 succinct/concise.

XmlElement("Order") 属性标记 List<Order> Orders

public class Customer
{
    public string Name { get; set; }

    [XmlElement("Order")]
    public List<Order> Orders{ get; set; }
}

更新: 您应该将一次性物品包装在 using 语句中。

using (var s = new FileStream(@"C:\temp\m.xml", FileMode.Create))
{
    var oSerialiser = new XmlSerializer(typeof(Customer));
    oSerialiser.Serialize(s, c);
}