.net XML serialization: как указать корневой элемент массива и дочерние имена элементов

Рассмотрите следующие сериализуемые классы:

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 не соответствуют Объекту имен классов и Объектам, предполагая, что я не могу изменить Объект или класс Объектов, есть ли кто-либо, почему указать имена элементов, которые я хочу путем изменения Класса MyClass?

5
задан John Saunders 20 March 2010 в 02:34
поделиться

3 ответа

public class MyClass
{
    public string Name {get;set;}
    [XmlArray("ItemValues")]
    [XmlArrayItem("ItemValue")]
    public Items MyItems {get;set;}
}
6
ответ дан 14 December 2019 в 08:47
поделиться

Возможно, вы захотите посмотреть на "Как: Specify an Alternate Element Name for an XML Stream"

В этой статье обсуждается использование XmlElementAttribute's ElementName для достижения этой цели.

1
ответ дан 14 December 2019 в 08:47
поделиться

Вы также можете рассмотреть возможность использования 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>
0
ответ дан 14 December 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: