К основному контенту

C# десериализация xml.

Недавно я писал о том, как десериализовать json строку в класс.

Сегодня я напишу как десериализовать в объект 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);


Комментарии

  1. Что за T в "public static T XmlToObject(string xmlString)". Откуда ты вообще ее взял, сразу по нормальному нельзя написать ?!

    ОтветитьУдалить
  2. Ответ на "Что за T" по ссылке http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. ваш блог обрезает часть кода лол)
    public static T XmlToObject < T > (string xmlString)
    так правильней

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Пример взаимодействия с Odnoklassniki Rest API на C#.

Итак, как и обещал, продолжаю тему взаимодействия с различными API. В прошлый раз писал про  API ВКонтакте , сегодня напишу про API Одноклассников. Первое, что нам нужно сделать - это зарегистрироваться как разработчик на Одноклассниках. Сделать это можно по следующей ссылке  Форма регистрации разработчика приложений Получив права разработчика, необходимо зарегистрировать сайт как приложение. Подробно как это сделать можно прочитать  здесь После того как сайт будет зарегистрирован придет письмо, содержащее: Application ID: xxxxxx. Публичный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx. Секретный ключ приложения:  xxxxxxxxxxxxxxxxxxxxxxxxx. Ссылка на приложение: http://www.odnoklassniki.ru/games/xxxxx Используя эти данные можно начать работу с API. Для выполнения запросов к API пользователь должен авторизоваться в Одноклассниках. Добавляем на нашем сайте ссылку для авторизации пользователя: http://www.odnoklassniki.ru/oauth/authorize?client_id...

C# и API ВКонтакте. Обращение к адресу API-сервиса путем создания HTTP-запроса (POST)

В статье  C# POST. Отправляем запросы на адрес стороннего сервера  я рассказал про метод, с помощью которого можно работать с различным API, принимающими POST запрос и возвращающими ответ в виде json или xml. Сегодня я хочу написать, как я применял этот метод при работе с API  ВКонтакте. Для примера возьму задачу получения через API списка групп, в которых состоит пользователь. В первую очередь необходимо зарегистристрировать наш сайт как приложение ВКонтакте. Заходим по ссылке  http://vk.com/editapp?act=create&site=1  и подключаем наш сайт. Дальше задача  делится на две подзадачи, а именно: авторизация пользователя и обращение к API для получения списка групп. Для авторизации мы пользователю предлагаем перейти по следующей ссылке: http://api.vkontakte.ru/oauth/authorize? response_type=code&redirect_uri={0} &client_id={1} &scope={2} &display=page , redirect_uri - адрес страницы нашего сайта, куда будет возвращен пользоват...

C# POST. Отправляем запросы на адрес стороннего сервера.

В ходе работы очень часто сталкиваюсь с различными внешними API, которые принимают на вход данные, отправленные через POST запрос, и возвращают результат в виде xml или json. Ниже привожу свой метод отправляющий данные на адрес стороннего сервера через POST: postedData - данные, отправляемые на сервер, postUrl - адрес, по которому мы обращаемся public static HttpWebResponse PostMethod(string postedData, string postUrl) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl); request.Method = "POST"; request.Credentials = CredentialCache.DefaultCredentials; UTF8Encoding encoding = new UTF8Encoding(); var bytes = encoding.GetBytes(postedData); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; using (var newStream = request.GetRequestStream()) { newStream.Write(bytes, 0, bytes.Length); newStream.Close(); } return (HttpWebResponse)request.GetResponse(); } Метод возвращает ответ ...