Внедрить атрибут XML в сериализацию

2

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

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

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

Теги:
xml-serialization

2 ответа

2
Лучший ответ

Вы можете создать оболочку для 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
    Приятно. Я подходил в качестве задания для пространства имен XmlSerializer. У этого есть куча методов, которые делают почти то, что я хочу, но не совсем. Это намного проще. Спасибо!
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню