Недавно я писал о том, как десериализовать json строку в класс.
Сегодня я напишу как десериализовать в объект xml файл.
Итак, допустим, что мы хотим десериализовать xml файл со следующей структурой:
<order id="1234">
<items>
<item price="0123"/>
<item price="1234"/>
<item price="2345"/>
</items>
</order>
Создаем 2 класса:
Сегодня я напишу как десериализовать в объект xml файл.
Итак, допустим, что мы хотим десериализовать xml файл со следующей структурой:
<order id="1234">
<items>
<item price="0123"/>
<item price="1234"/>
<item price="2345"/>
</items>
</order>
Создаем 2 класса:
[XmlRoot("order")]
public class OrderModel
{
[XmlArray("items")]
[XmlArrayItem("item", typeof(OrderItem))]
public List<OrderItem> Items { get; set; }
[XmlAttribute("id")]
public int Id { get; set; }
}
public class OrderItem
{
[XmlAttribute("price")]
public int Price { get; set; }
}
Для класса OrderModel указываем атрибут XmlRoot, который говорит о том, что элемент order является корневым элементом xml файла.
Для вложенных элементов указываем атрибуты:
XmlAttribute - если речь идет об атрибуте данного элемента;
XmlArray - если десериализуем массив элементов;
XmlElement - если мы рассматриваем отдельный элемент.
Следующий шаг - создаем класс Utils
public class Utils
{
// Метод десериализует xml в класс
public static T XmlToObject(string xmlString)
{
var xs = new XmlSerializer(typeof(T));
var memoryStream = new MemoryStream(StringToUtf8ByteArray(xmlString));
return (T)xs.Deserialize(memoryStream);
}
// Метод конвертирует строку в UTF8 Byte массив
private static Byte[] StringToUtf8ByteArray(string xmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
var byteArray = encoding.GetBytes(xmlString);
return byteArray;
}
}
Метод XmlToObject десериализует xml файл, записанный в виде строки, в указанный класс.
Для нашего примера вызов метода выглядит следующим образом:
var orderModel= Utils.XmlToObject<OrderModel>(xmlToStirng);
Что за T в "public static T XmlToObject(string xmlString)". Откуда ты вообще ее взял, сразу по нормальному нельзя написать ?!
ОтветитьУдалитьОтвет на "Что за T" по ссылке http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
Удалитьваш блог обрезает часть кода лол)
ОтветитьУдалитьpublic static T XmlToObject < T > (string xmlString)
так правильней