JSON 架构到 C#

JSON Schema to C#

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

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

我惊奇地发现 Visual Studio 能够使用 "Edit -> Paste Special -> Paste JSON as classes" 开箱即用。此功能背后的 code/class/executable/dll 是否可以通过编程方式访问预构建步骤?

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

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

T4 确实适用于单个文件(因此 "template"),但您可以轻松地从生成多个文件的 IDE 中启动模板 "builds"。高级是您将导入像 Json.Net 这样的辅助程序集来读取输入,然后使用常规的旧文件 I/O 来写入新文件。它没有什么魔力。 DTE 可以做一些事情,例如启动外部流程或在完成后呈现串联的构建日志以供人工审核。

一些注意事项:我还没有在 VS2017 中使用 T4,但我读过它需要 to start using them, and if you are on an earlier VS there is apparently an issue 在您迁移到 VS2017 后它们最初不会随您的项目一起加载。

如@Stiefel 所述,您可以use nswag for this。首先将 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>