Десериализация XML в C# объект

Задача: Как десериализировать XML документ в C# объекты

Инструменты: C#

Решение:  Для десериализации XML в C# объекты нужно выполнить следующие этапы:

  • Подготовим xml документ. Для примера будем использовать следующий xml:

<?xml version="1.0"?>
  <test>
    <title>Some Title</title>
    <resource_path>C:\Tests\</resource_path>
    <date>8/1/2019</date>
    <time>5:35:38 PM</time>
  </test>

  • Подготовим C# объект для сериализации/десериализации

[Serializable]
  [XmlRoot(ElementName = "test", Namespace = "")]
  public class Test
  {
      [XmlElement("title")]
      public string Title { get; set; }

      [XmlElement("resource_path")]
      public string ResourcePath { get; set; }

      [XmlElement("date")]
      public string Date { get; set; }

      [XmlElement("time")]
      public string Time { get; set; }
    }

  • Напишем код для десериализации. На вход передаем файл, в результате получим десериализированный объект

using System.Xml.Serialization;

...

  private T Load<T>(string filePath)
  {
    using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
      var serializer = new XmlSerializer(typeof(T));
      return (T)serializer.Deserialize(fileStream);
    }
  }

  • Пример использования

var xmlTests = Load<Test>(<path yo xml>);

PS: В Visual Studio есть неплохой инструмент, который может помочь создать набор классов по существующему xml документу. Для этого нужно скопировать xml текст, в Visual Studio создать новый файл и выбрать пункт меню Edit -> Paste Special -> Paste XML as Classes

Добавить комментарий