Как я могу заполнить свойства моих пользовательских классов XML-файлом?

#c# #xml #parsing #dynamic #properties

#c# #xml #синтаксический анализ #динамический #свойства

Вопрос:

Моя программа создает файлы xslt и сохраняет в них информацию из пользовательских классов, это делается динамически с помощью атрибутов, которые помечают классы и свойства, которые я хочу сохранить в xslt. Это было довольно просто, потому что мне просто нужно было назвать атрибут подобно свойству и заполнить значение методом toString() объекта.

Теперь я хочу каким-то образом перезагрузить эту информацию, создать те же классы и заполнить свойства этими значениями. Но как мне сделать это, например, с перечислениями и другими сложными типами, если я не знаю тип во время компиляции? Должен быть какой-то метод синтаксического анализа..

Есть идеи?

Комментарии:

1. Почему вы имеете дело с xslt, а не с XML?

2. Потому что xslt в основном не используется как файл для хранения объектов. Это шаблон, созданный графическим дизайнером. Я хочу каким-то образом снова загрузить этот шаблон, чтобы я мог настроить и изменить его. Причина этого в том, что мне не нужны 2 файла, xslt и файл сохранения.

3. В этом случае, я думаю, вам нужно написать свой пользовательский анализатор, который принимает xslt-файл в качестве входных данных и анализирует его, создавая соответствующий экземпляр шаблона.

4. Знаете ли вы, как создавать экземпляры классов, о которых вы не знаете до выполнения? (Я не хочу жестко кодировать свойства и классы в коде на случай, если в xslt будут добавлены какие-то новые атрибуты или элементы)

5. Нет, это невозможно. Но если бы вы могли узнать их тип во время синтаксического анализа, это могло бы помочь.

Ответ №1:

Если вы просто хотите сериализовать свои объекты в XML, а затем дестерилизовать их, и ваши объекты содержат интерфейсы, общие списки или другой сложный тип, вы можете использовать очень полезную библиотеку сериализацииhttp://www.codeproject.com/KB/XML/sharpserializer.aspx автор Павел Идзиковский. Это действительно прямолинейно и может быть очень полезно в таких случаях.