Я пытаюсь сериализовать массив и хочу присоединить атрибут к массиву. Например, выходной я хочу:
<ArrayOfThingie version="1.0">
<Thingie>
<name>one</name>
</Thingie>
<Thingie>
<name>two</name>
</Thingie>
</ArrayOfThingie>
Это просто примитивный массив, поэтому я не хочу определять атрибут для самого массива, просто в его сериализации. Есть ли способ вставить атрибут в сериализацию?
Вы можете создать оболочку для 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());
}
Немного взлома будет состоять в сериализации массива в XML и последующем изменении сериализованного XML перед сохранением. Более чистый способ, предполагающий, что Array является свойством класса, будет Добавить атрибут в сериализованный XML node.