我正在寻找一个类或工具来将JSON模式转换为C#类作为预建步骤。
我找到了几个“家庭酿造”解决方案(jsonschema.net,NJsonSchema,...),但更喜欢使用与公司/项目相关的一些成熟/官方代码。据我所知,Newtonsoft.json.Schema包只能以相反的方式进行(C#Class - > JSON)
我惊奇地发现Visual Studio能够使用“编辑 - >选择性粘贴 - >粘贴JSON作为类”开箱即用。此功能背后的代码/类/可执行文件/ dll是否可以通过编程方式进行预构建步骤?
答案 0 :(得分:1)
如@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>
答案 1 :(得分:0)
您应该可以使用Visual Studio模板转换(T4)文件执行此操作。几年前,我将它们用于类似的场景 - 从类似专有WSDL的XML格式生成C#服务代理类。不幸的是,我无法再访问代码了,但是一旦你开始使用Googling for T4和codegen,就很容易弄明白。
您可能还想查看可扩展性/自动化模型,即DTE,以确定您是否可以访问内置功能(我将从T4启动)。< / p>
T4真正适用于单个文件(因此&#34;模板&#34;)但您可以轻松地启动模板&#34;构建&#34;来自生成多个文件的IDE。高级别是您将导入Json.Net等帮助程序集来读取输入,然后使用常规的旧文件I / O来编写新文件。它没什么神奇之处。 DTE可以执行诸如启动外部流程或提供连锁构建日志以便在完成时进行人工审核。
一些警告:我还没有在VS2017中使用T4,但是我已经阅读了它需要extra steps才能开始使用它们,如果你在早期的VS上,那么显然是issue迁移到VS2017后,他们最初不会加载您的项目。