JSON Schema to C#



我正在寻找一个类或工具,将 JSON 模式转换为 C# 类作为预构建步骤。

我找到了几个"自制"解决方案(jsonschema.net,NJsonSchema等),但更愿意使用一些与公司/项目相关的成熟/官方代码。我知道Newtonsoft.json.Schema包只能反过来做(C#类->JSON)

我惊讶地发现Visual Studio能够使用"编辑->粘贴特殊->粘贴JSON作为类"来开箱即用。此功能背后的代码/类/可执行文件/dll 是否可以通过编程方式访问预构建步骤?

正如@Stiefel提到的,你可以使用 nswag 来实现这一点。首先将NSwag.MSBuildnuget 包添加到项目中,这也允许你使用$(NSwagExe)宏来引用 nswag。然后,向项目添加一个预构建步骤,在我的例子中,它看起来像这样:

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

你应该能够使用 Visual Studio 模板转换 (T4) 文件执行此操作。几年前,我将它们用于类似的场景 - 从专有的类似WSDL的XML格式生成C#服务代理类。不幸的是,我无法再访问代码,但是一旦您开始在Google上搜索T4和codegen,就很容易弄清楚。

您可能还想查看可扩展性/自动化模型,也称为 DTE,以确定您是否可以访问内置功能(我将从 T4 启动)。

T4 实际上是为单个文件(因此称为"模板")而设计的,但您可以轻松地从生成多个文件的 IDE 启动模板"构建"。高级别是,你将导入帮助程序程序集(如 Json.Net)来读取输入,然后使用常规旧文件 I/O 写入新文件。它没有太多的魔力。DTE 可以执行诸如启动外部进程或提供串联的生成日志以供人工审阅等操作。

一些警告:我还没有在VS2017中使用T4,但我读到它需要额外的步骤才能开始使用它们,如果你使用的是较早的VS,显然有一个问题,即它们最初不会在你迁移到VS2017后加载你的项目。

最新更新