Схема JSON для C#

Я ищу класс или инструмент для преобразования схемы JSON в класс C# в качестве шага предварительной сборки.

Я нашел несколько решений "домашнего приготовления" (jsonschema.net, NJsonSchema, ...), но предпочел бы использовать какой-то зрелый / официальный код, связанный с компанией / проектом. Я понимаю, что пакет Newtonsoft.json.Schema может сделать это только наоборот (C# Class -> JSON)

Я неожиданно обнаружил, что Visual Studio может сделать это из коробки, используя "Правка -> Специальная вставка -> Вставить JSON как классы". Является ли код / ​​класс / исполняемый файл /dll, который стоит за этой функцией, насколько доступным программно для этапа предварительной сборки?

1 ответ

Как упоминал @Stiefel, для этого вы можете использовать nswag. Сначала добавьте NSwag.MSBuild nuget в ваш проект, который также позволяет вам использовать $(NSwagExe)макрос для ссылки на nswag. Затем добавьте в свой проект этап предварительной сборки, в моем случае это выглядит так:

       <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="$(NSwagExe) jsonschema2csclient /name:Manifest /namespace:ManifestCreator.Models /input:$(SolutionDir)schemas\SingleFileSchema.0.1.0.json /output:$(ProjectDir)Models\ManifestSchema.cs" />
</Target>

Вы должны быть в состоянии сделать это с файлами преобразования шаблона Visual Studio (T4). Пару лет назад я использовал их для аналогичного сценария - генерации прокси-классов службы C# из закрытого WSDL-подобного формата XML. К сожалению, у меня больше нет доступа к коду, но это довольно легко выяснить, когда вы начнете Googling для T4 и codegen.

Возможно, вы также захотите взглянуть на модель расширяемости / автоматизации, то есть DTE, чтобы выяснить, можете ли вы получить доступ к встроенной функции (которую я бы запустил с T4).

T4 действительно предназначен для отдельных файлов (отсюда и "шаблон"), но вы также можете легко запустить "сборки" шаблонов из IDE, которые генерируют несколько файлов. На высшем уровне вы будете импортировать вспомогательные сборки, такие как Json.Net, для чтения входных данных, а затем использовать обычный ввод / вывод старых файлов для записи новых файлов. В этом не так много магии. DTE может делать такие вещи, как запуск внешних процессов или представлять связанные журналы сборки для проверки человеком после завершения.

Несколько предостережений: я еще не использовал T4 в VS2017, но я читал, что требуются дополнительные шаги, чтобы начать их использовать, и если вы используете более раннюю VS, очевидно, есть проблема, когда они изначально не загружаются с вашим проект после перехода на VS2017.

Другие вопросы по тегам