[У меня был опыт создания чего-то подобного в .Net - я не уверен, насколько это важно для вас.]
Мне пришлось написать инструмент импорта, который мог бы обрабатывать файлы любого формата.Чтобы справиться с этим должным образом, я написал небольшой класс, который будет принимать определение формата xml (имя, тип данных, строка формата, пользовательский анализатор и т. Д.) И генерировать класс, который может читать файл и отображать IQueryable<FileFormat>
и некоторыедополнительные метаданные.
Стоит отметить, что, чтобы сделать его полностью гибким, я должен был разрешить определению формата предоставлять лямбда C # / VB, которая будет компилироваться и выполняться (например, когда формат даты ввода нестандартный и нужен нестандартный парсер).Это явно риск для безопасности - поэтому, когда я создал экземпляр динамического класса, я сделал это в отдельном домене приложений с очень небольшим количеством привилегий.Это может не применяться в вашей ситуации.
Мы использовали специальный шаблонизатор для генерации кода, который затем был скомпилирован с использованием пространства имен System.Codedom.Compiler - Это позволило нам создавать сборки икэшируйте их, пока не изменилось определение.Возможно, стоит рассмотреть шаблонизатор Razor, если вы делаете что-то подобное.
Единственные реальные проблемы, которые у нас возникли, были связаны с кодированием неизвестного типа данных.Сделав так, чтобы пользовательский класс реализовал наш собственный интерфейс IImportFile
, который предоставлял метаданные стандартным способом (фактически, ту же информацию, что и в спецификации xml), мы могли обойти его без особых усилий.
Нам повезлов том смысле, что это инструмент для доверенных пользователей (по крайней мере, только доверенные пользователи могут предоставить новую спецификацию формата файла), поэтому риски безопасности были ограничены.Если вы компилируете код, основанный на пользовательском вводе, убедитесь, что у вас есть адекватные меры безопасности.