列表的XML序列化

时间:2012-06-29 08:11:56

标签: c# xml-serialization

我有如下所示的课程。其中包含购物项目,其中数字可以在0到n之间变化。

namespace SerializationPOC
{

   public class ShoppingItems
   {
     public string CustomerName { get; set; }
     public string Address { get; set; }
     public List<Item> Items { get; set; }
   }

   public class Item
   {
    public string Name { get; set; }
    public string Price { get; set; }
   }
}

是否可以将类序列化为获得如下所示的XML Schema。

<?xml version="1.0" encoding="utf-8" ?>
<ShoppingItems>
<CustomerName>John</CustomerName>
<Address>Walstreet,Newyork</Address>
<Item1>Milk</Item1>
<Price1>1$</Price1>
<Item2>IceCream</Item2>
<Price2>1$</Price2>
<Item3>Bread</Item3>
<Price3>1$</Price3>
<Item4>Egg</Item4>
<Price4>1$</Price4>


<Item..n>Egg</Item..n>
<Price..n>1$</Price..n>
</ShoppingItems>

我想知道是否可以通过使用Serilization来实现,如果不是最好的方法来实现这个架构?

2 个答案:

答案 0 :(得分:4)

没有支持该布局的标准序列化程序。你必须自己做。就个人而言,我会说“你做错了”;我强烈建议(如果可能)使用类似

的格式
<Item name="IceCream" Price="1$"/>

<Item><Name>IceCream</Name><Price>1$</Price></Item>

这两项对于XmlSerializer来说都是微不足道的。

LINQ-to-XML可能是您的最佳选择,例如:

var items = new ShoppingItems
{
    Address = "Walstreet,Newyork",
    CustomerName = "John",
    Items = new List<Item>
    {
        new Item { Name = "Milk", Price = "1$"},
        new Item { Name = "IceCream", Price = "1$"},
        new Item { Name = "Bread", Price = "1$"},
        new Item { Name = "Egg", Price = "1$"}
    }
};

var xml = new XElement("ShoppingItems",
    new XElement("CustomerName", items.CustomerName),
    new XElement("Address", items.Address),
    items.Items.Select((item,i)=>
        new[] {
            new XElement("Item" + (i + 1), item.Name),
            new XElement("Price" + (i + 1), item.Price)}))
    .ToString();

答案 1 :(得分:0)

请您查看我的文章[^]

作为示例,您可以查看以下代码。 序列化方法在文章中给出。

var test = new ShoppingItems()
                           {
                                CustomerName = "test",
                                 Address = "testAddress",
                                  Items = new List<Item>()
                                              {
                                                  new Item(){ Name = "item1", Price = "12"},
                                                  new Item(){Name = "item2",Price = "14"}
                                              },
                           };

            var xmlData = Serialize(test);

它将返回下面给出的字符串,

<?xml version="1.0" encoding="utf-16"?>
 <ShoppingItems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CustomerName>test</CustomerName>
    <Address>testAddress</Address>
    <Items>
        <Item>
            <Name>item1</Name>
            <Price>12</Price>
       </Item>
       <Item>
           <Name>item2</Name>
           <Price>14</Price>
       </Item>
   </Items>
</ShoppingItems>