.NET XML序列化:如何指定数组的根元素和子元素名称

5
考虑以下可序列化的类:
class Item {...}
class Items : List<Item> {...}
class MyClass
{
   public string Name {get;set;}
   public Items MyItems {get;set;}
}

我希望序列化输出看起来像这样:

<MyClass>
    <Name>string</Name>
    <ItemValues>
        <ItemValue></ItemValue>
        <ItemValue></ItemValue>
        <ItemValue></ItemValue>
    </ItemValues>
</MyClass>

请注意,元素名称ItemValues和ItemValue与类名Item和Items不匹配,假设我不能更改Item或Items类,有没有办法通过修改MyClass类来指定我想要的元素名称?


什么样的序列化?XmlSerializerDataContractSerializer - John Saunders
3个回答

6
public class MyClass
{
    public string Name {get;set;}
    [XmlArray("ItemValues")]
    [XmlArrayItem("ItemValue")]
    public Items MyItems {get;set;}
}

1

请不要发布.NET 1.1链接。点击该链接但未注意到的人将会继续点击文档中的链接,然后被引导至越来越旧的信息。 - John Saunders
实际上,在这里 [XmlElement] 不能帮忙。它只允许你这样做 <MyClass><Name>string</Name><ItemValue></ItemValue><ItemValue></ItemValue><ItemValue></ItemValue></MyClass> (注意没有 <ItemValues>),但这并不是问题所要求的。 - Marc Gravell

0
你也可以考虑使用 Linq to Xml 从你的类构建 XML。类似这样:
XElement element = new XElement(
    "MyClass",
    new XElement("Name", myClass.Name),
    new XElement(
        "ItemValues",
        from item in myClass.Items
        select new XElement(
            "ItemValue",
            new XElement("Foo", item.Foo))));

这将会创建

<MyClass>
  <Name>Blah</Name>
  <ItemValues>
    <ItemValue>
      <Foo>A</Foo>
    </ItemValue>
    <ItemValue>
      <Foo>B</Foo>
    </ItemValue>
  </ItemValues>
</MyClass>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接