Как изменить имена элементов массива в XmlSerialization? - PullRequest
3 голосов
/ 15 апреля 2010

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

[Serializable]
public class Human
{
    public string Name { get; set; }
}

Тогда

        using (MemoryStream ms = new MemoryStream())
        {   
            Human[] mans = new Human[] { 
                new Human() { Name = "Moim" }
                    };

            XmlSerializer xs = new XmlSerializer(typeof(Human[]));
            xs.Serialize(ms, mans);
            string s = System.Text.ASCIIEncoding.ASCII.GetString(ms.ToArray());
        }

В этот момент переменная s будет содержать значение типа

<?xml version="1.0"?>
<ArrayOfHuman xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Human>
    <Name>Moim</Name>
  </Human>
</ArrayOfHuman>

Теперь все, что мне нужно сделать, это изменить корневой элемент массива xml «ArrayOfHuman» на что-то вроде «MyFavoriteArrayRootName». Я видел интерфейс IXmlSerializable, но он пропускает имя корневого элемента. У кого-нибудь есть идеи, как этого добиться?

Все комментарии будут высоко оценены.

С уважением.

Ответы [ 3 ]

2 голосов
/ 15 апреля 2010

новое ключевое слово отсутствовало перед атрибутом XmlRootAttribute.

XmlSerializer xs = new XmlSerializer(
    typeof(Human[]), new XmlRootAttribute("MyFavoriteArrayRootName"));
0 голосов
/ 20 июня 2012

Поместите XmlRoot в свой класс Human следующим образом:

[Serializable]
[XmlRoot("MyFavoriteArrayRootName")]
public class Human
{
    public string Name { get; set; }
}
0 голосов
/ 15 апреля 2010

1001 * попробовать *

XmlSerializer xs = new XmlSerializer(typeof(Human[]), XmlRootAttribute("MyFavoriteArrayRootName"));
...