Сериализация массива объектов как Xxxxs, а не ArrayOfXxxx - PullRequest
4 голосов
/ 28 апреля 2010

Я использую ASP.NET MVC с XmlResult от MVCContrib.

У меня есть массив объектов Xxxx, которые я передаю в XmlResult.

Это сериализуется как:

<ArrayOfXxxx>
  <Xxxx />
  <Xxxx />
<ArrayOfXxxx>

Я бы хотел, чтобы это выглядело так:

<Xxxxs>
  <Xxxx />
  <Xxxx />
<Xxxxs>

Есть ли способ указать, как класс сериализуется, когда он является частью массива?

Я уже использую XmlType для изменения отображаемого имени, есть ли что-то подобное, что позволяет вам задавать имя группы в массиве.

[XmlType(TypeName="Xxxx")]
public class SomeClass

Или мне нужно добавить класс-оболочку для этой коллекции?

1 Ответ

4 голосов
/ 28 апреля 2010

Это возможно обоими способами (с помощью оболочки и определения атрибута XmlRoot или добавления XmlAttributeOverrides в сериализатор).

Я реализовал это вторым способом:

вот массив целых чисел, я использую XmlSerializer для его сериализации:

int[] array = { 1, 5, 7, 9, 13 };
using (StringWriter writer = new StringWriter())
{
    XmlAttributes attributes = new XmlAttributes();
    attributes.XmlRoot = new XmlRootAttribute("ints");

    XmlAttributeOverrides attributeOverrides = new XmlAttributeOverrides();
    attributeOverrides.Add(typeof(int[]), attributes);

    XmlSerializer serializer = new XmlSerializer(
        typeof(int[]), 
        attributeOverrides
    );
    serializer.Serialize(writer, array);
    string data = writer.ToString();
}

переменная данных (которая содержит сериализованный массив):

<?xml version="1.0" encoding="utf-16"?>
<ints xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <int>1</int>
  <int>5</int>
  <int>7</int>
  <int>9</int>
  <int>13</int>
</ints>

Итак, вместо ArrayOfInt мы получили ints в качестве корневого имени.

Подробнее о конструкторе XmlSerializer, который я использовал, можно найти здесь .

...