У меня есть коллекция объектов, и для каждого объекта у меня есть тип FullName и либо его значение (в виде строки), либо поддерево деталей внутренних объектов (снова введите FullName и значение или поддерево).
Для каждого корневого объекта мне нужно создать фрагмент XML, который будет десериализуемым в xml.
Проблема с XmlSerializer заключается в том, что то есть следующий объект
int age = 33;
будет сериализовано до
<int>33</int>
Сначала кажется, что все в порядке, но при работе с отражением вы будете использовать System.Int32 в качестве имени типа, а int - псевдоним, а этот
<System.Int32>33</System.Int32>
не десериализуется.
Теперь дополнительная сложность связана с тем, что мне нужно обрабатывать любой возможный тип данных.
Поэтому решения, использующие System.Activator.CreateInstance (..) и приведение типов, не сработают, если я не пойду по пути генерации и компиляции кода как способа достижения этого (чего я бы предпочел избежать) 1022 *
Примечания:
Быстрое исследование с использованием .NET Reflector показало, что XmlSerializer использует внутренний класс TypeScope , посмотрите на его статический конструктор и убедитесь, что он инициализирует внутренний HashTable с отображениями.
Итак, вопрос в том, что является лучшим (и я имею в виду элегантный и солидный) способ обойти этот печальный факт?