使用特定格式序列化列表

时间:2012-10-28 05:40:56

标签: c# xml xml-serialization

  

可能重复:
  How to rename <ArrayOf> XML attribute that generated after serializing List of objects

这应该很简单,但我在这里遗漏了一些东西。序列化我的类时,我需要以下格式输出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>

我想用“Items”替换“ArrayOfItem”。另外,为什么我看到附加了“ArrayOf”?提前谢谢。

2 个答案:

答案 0 :(得分:0)

当您获得类型为ArrayOfItem List<Item>的{​​{1}}类型时,您将获得Array。当您对xml反序列化器进行反序列化时,这是标准类型Item的数组。您可以为这样的格式序列化单个Item,但它仍然不会相同。

如果您序列化单个项目,您将获得

Item

答案 1 :(得分: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>