Внедрить атрибут XML в сериализацию - PullRequest
2 голосов
/ 05 августа 2009

Я пытаюсь сериализовать массив и хочу прикрепить атрибут к массиву. Например, вывод, который я хочу:

<ArrayOfThingie version="1.0">
  <Thingie>
    <name>one</name>
  </Thingie>
  <Thingie>
    <name>two</name>
  </Thingie>
</ArrayOfThingie>

Это просто примитивный массив, поэтому я не хочу определять атрибут для самого массива, только в его сериализации. Есть ли способ ввести атрибут в сериализацию?

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

Вы можете создать оболочку для ArrayOfThingie только для сериализации:

    public class Thingie
    {
        [XmlElement("name")]
        public string Name { get; set; }
    }

    [XmlRoot]
    public class ArrayOfThingie
    {
        [XmlAttribute("version")]
        public string Version { get; set; }
        [XmlElement("Thingie")]
        public Thingie[] Thingies { get; set; }
    }

    static void Main(string[] args)
    {
        Thingie[] thingies = new[] { new Thingie { Name = "one" }, new Thingie { Name = "two" } };

        ArrayOfThingie at = new ArrayOfThingie { Thingies = thingies, Version = "1.0" };
        XmlSerializer serializer = new XmlSerializer(typeof(ArrayOfThingie));
        StringWriter writer = new StringWriter();
        serializer.Serialize(writer, at);

        Console.WriteLine(writer.ToString());
    }
0 голосов
/ 05 августа 2009

Немного было бы взломать сериализацию массива в XML, а затем изменить сериализованный XML перед сохранением. Более понятный способ предположить, что Array является свойством класса, состоит в том, чтобы добавить атрибут в сериализованный узел XML .

...