IXmlSerializable, чтение дерева XML со многими вложенными элементами
Не могли бы вы, ребята, дать мне пример, как читать и писать из / в xml следующим образом:
<Foolist>
<Foo name="A">
<Child name="Child 1"/>
<Child name="Child 2"/>
</Foo>
<Foo name = "B"/>
<Foo name = "C">
<Child name="Child 1">
<Grandchild name ="Little 1"/>
</Child>
</Foo>
<Foolist>
1 ответ
Решение
Имя элемента действительно изменяется на уровне? Если нет, вы можете использовать очень простую модель класса и XmlSerializer
, Внедрение IXmlSerializable
это... сложно; и подвержен ошибкам. Избегайте этого, если только вы не должны его использовать.
Если имена разные, но жесткие, я бы просто запустил их через xsd:
xsd example.xml
xsd example.xsd /classes
Для XmlSerializer
без IXmlSerializable
пример (одинаковые имена на каждом уровне):
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
[XmlRoot("Foolist")]
public class Record
{
public Record(string name)
: this()
{
Name = name;
}
public Record() { Children = new List<Record>(); }
[XmlAttribute("name")]
public string Name { get; set; }
[XmlElement("Child")]
public List<Record> Children { get; set; }
}
static class Program
{
static void Main()
{
Record root = new Record {
Children = {
new Record("A") {
Children = {
new Record("Child 1"),
new Record("Child 2"),
}
}, new Record("B"),
new Record("C") {
Children = {
new Record("Child 1") {
Children = {
new Record("Little 1")
}
}
}
}}
};
var ser = new XmlSerializer(typeof(Record));
ser.Serialize(Console.Out, root);
}
}