2

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

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

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

4

2 回答 2

3

正如@Stiefel 提到的,您可以为此使用 nswag。首先将NSwag.MSBuildnuget包添加到您的项目中,这也允许您使用$(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>
于 2020-12-04T07:29:41.380 回答
1

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

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

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

几个注意事项:我还没有在 VS2017 中使用过 T4,但我已经读过它需要额外的步骤才能开始使用它们,如果你使用的是早期的 VS,显然存在一个问题,即它们最初没有加载你的迁移到 VS2017 后的项目。

于 2018-01-04T14:46:17.963 回答