IXmlSerializable, чтение XML-дерева со многими вложенными элементами - PullRequest
1 голос
/ 26 июня 2009

Не могли бы вы, ребята, дать мне пример, как читать и писать из / в 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 Ответ

2 голосов
/ 26 июня 2009

Имя элемента действительно меняется на уровень? Если нет, вы можете использовать очень простую модель класса и 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...