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