输出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);
}
我正在寻找解决以下问题的建议: 我需要在序列化输出时从 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);
}