1

我有如下所示的课程。其中包含数字可以从 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>

我想知道这是否可以通过使用序列化来实现,如果不是实现这个模式的最佳方法是什么?

4

2 回答 2

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();
于 2012-06-29T08:28:13.203 回答
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>
于 2012-06-29T09:25:46.160 回答