【问题标题】:Serialize list with a certain format [duplicate]以某种格式序列化列表[重复]
【发布时间】:2012-10-28 05:40:55
【问题描述】:

可能重复:
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>

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

【问题讨论】:

    标签: c# xml xml-serialization


    【解决方案1】:

    为什么不用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>
    

    【讨论】:

    • 我想即时创建 xml,这对我来说效果很好。谢谢!
    【解决方案2】:

    你得到ArrayOfItem,因为你得到List&lt;Item&gt;类型,即Array类型Item。当您反序列化时,这是标准的,xml 反序列化器将生成 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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多