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スキーマを取得するようにクラスをシリアル化することは可能ですか?

<?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

私の記事を見てください、[^]

例として、以下のコードを調べることができます。Serializeメソッドは記事に記載されています。

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 に答える