Как сформировать структуру по xml-файлу, используя System.Reflection и/или ILGenerator на C#?

У меня имеется n-ое количество xml-файлов с данным для бд разной, но единой в рамках файла, структуры. Возникла необходимость одним универсальным(?) методом распаковать любой xml-файл в List<...> структур или экземпляров класса. Проблема в том, что, по-хорошему, нужно для каждого файла писат собственный класс/структуру, в массив экземпляров которого он будет распаковываться. Но файлов достаточно много и писать самому для каждого структуру это не самый удобный по времени вариант.

Появился вариант сгенерировать структуру в ходе выполнения программы через System.Reflection или System.Reflection.Emit.ILGenerator, но я решительно не понимаю, как это нормально использовать, и вообще в том ли направлении я ищу решение.

По логике, сигнатура метода должна выглядеть как-то так: public static DeserializedXml XmlUnbox(string path) { ...} где DeserializedXml это структура:

struct DeserializedXml
{
    Type typeInfo; // информация о сгенерированном типе
    List<object> xmlElements; // список считанных объектов типа typeInfo
}

Пример структуры xml-файла:

<xml>
  <CreditCard>
      <CardIssuer>MasterCard</CardIssuer>
      <CardNumber>1111 2222 3333 4444</CardNumber>
      <CardExpDate>2020\01</CardExpDate>
      <Balance>1000</Balance>
      <CardHolder>IVAN IVANOV</CardHolder>
  </CreditCard>
</xml>

И фрагмент метода который я пытался написать:

class DataUnbox
{
    struct DeserializedXml
    {
        Type typeInfo; // информация о сгенерированном типе
        List<object> xmlElements; // список считанных объектов типа typeInfo
    }
    public static DeserializedXml XmlUnbox(string file)
    { 
        string name;    // имя структуры
        List<string> fields = new List<string>();   // поля структуры

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(file);
        XmlElement xRoot = xDoc.DocumentElement;
        XmlNode structNode = xRoot.FirstChild;
        name = structNode.Name;     // получение имени структуры по названию тега xml
        foreach (XmlNode cNode in structNode.ChildNodes) fields.Add(cNode.Name); // получение имён полей структуры из дочерних элементов
    }
}

Ответы (0 шт):