Deserialize XML to Array

Feb 14, 2010 22:05

Для десериализации повторяющихся тэгов в массив, эти тэги должны быть заключены в некий обобщающий тэг. Например:

test_1
        test_2

Тут TestItems содержит массив.
Чтобы десериализовать такой Xml можно использовать 2 класса. Один - основной класс, который будет содержать массив элементов типа TestItem. И класс описывающий TestItem.

using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace TestApp
{
// Базовый класс, будет соответствовать корневому элементу TestData.
    [XmlRoot("TestData")]
    public class TestData
    {
// Элемент TestItems будет соответствовать массиву типа TestItem[].
        [XmlArray("TestItems")]
        public TestItem[] testItems { get; set; }
// Конструктор.
        public TestData()
        {
        }
    }

// Класс, будет соответствовать элементу TestItem.
    [XmlRoot("TestItem")]
    public class TestItem
    {
// Получение аттрибута этого элемента.
        [XmlAttribute("id")]
        public string id { get; set; }
// Получение текста этого элемента.
        [XmlText()]
        public string testItemValue { get; set; }
// Конструктор.
        public TestItem()
        {
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();
// Создаем Xml для десериализации.
            xmlDoc.LoadXml(@"

test_1
        test_2

");
// Создаем сериалайзер для нашего типа.
            XmlSerializer ser = new XmlSerializer(typeof(TestData));
            XmlReader reader = new XmlTextReader(new StringReader(xmlDoc.DocumentElement.OuterXml));
// Десериализуем.
            object obj = ser.Deserialize(reader);
// Приводим к нашему типу.
            TestData td = (TestData)obj;
        }
    }
}

serialize, .net, xml, deserialize, csharp

Previous post Next post
Up