0

重複の可能性:
オブジェクトのリストをシリアル化した後に生成された <ArrayOf> XML 属性の名前を変更する方法

これは本当に単純なはずですが、ここで何かが欠けています。クラスをシリアル化するときに、以下の形式で出力 xml が必要です。

<items>
 <item id="1" name="John">
 <item id="2" name="Peter">
 <item id="3" name="Shane">
<items>

クラスは次のとおりです。

public class Item
    {
        [XmlAttribute]
        public string Id;
        [XmlAttribute]
        public string Name;
    }

ここに私のテストコードがあります:

var items = new List<Item>();
            for (int i = 0; i < 4; i++)
            {
                var item = new Item();
                item.Id = i.ToString();
                item.Name = "Jeff" + " - " + i.ToString();
                items.Add(item);
            }
            Ser(items);

static void Ser(object o)
        {
            XmlSerializer x = new XmlSerializer(o.GetType());

            var xns = new XmlSerializerNamespaces();
            xns.Add(string.Empty, string.Empty);

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;
            XmlWriter writer = XmlWriter.Create(Console.Out, settings);

            x.Serialize(writer, o, xns);
            Console.WriteLine();
        }

私が得ている出力は次のとおりです。

<ArrayOfItem>
  <Item Id="0" Name="Jeff - 0" />
  <Item Id="1" Name="Jeff - 1" />
  <Item Id="2" Name="Jeff - 2" />
  <Item Id="3" Name="Jeff - 3" />
</ArrayOfItem>

「ArrayOfItem」を「Items」に置き換えたい。また、「ArrayOf」が追加されているのはなぜですか? 前もって感謝します。

4

2 に答える 2

0

ArrayOfItemtype of List<Item>which is Arrayof typeを取得しているように取得していますItem。これは、xml デシリアライザーをデシリアライズするときの標準であり、type の配列を作成しItemます。そのような形式で個別にシリアル化できますItemが、それでも同じではありません。

個々のアイテムをシリアル化すると、

  <Item Id="0" Name="Jeff - 0" />
  <Item Id="1" Name="Jeff - 1" />
  <Item Id="2" Name="Jeff - 2" />
  <Item Id="3" Name="Jeff - 3" />
于 2012-10-28T05:54:24.307 に答える
0

linq2Xmlを使用しない理由..シンプルでかっこいい

XElement doc=new XElement("Items");

foreach(var item in items)
{
    doc.Add(
        new XElement("Item",
        new XAttribute("Id",item.Id),new XAttribute("Name",item.Name)
           )
    );
}

doc.ToString();//your xml

出力:

<items>
 <item id="1" name="John">
 <item id="2" name="Peter">
 <item id="3" name="Shane">
<items>
于 2012-10-28T06:06:48.890 に答える