代码之家  ›  专栏  ›  技术社区  ›  Stiefel

C的JSON模式#

  •  2
  • Stiefel  · 技术社区  · 7 年前

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

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

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

    2 回复  |  直到 7 年前
        1
  •  3
  •   UnionP    4 年前

    正如@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>
    
        2
  •  1
  •   McGuireV10    7 年前

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

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

    T4实际上是针对单个文件(因此称为“模板”)的,但您也可以从生成多个文件的IDE轻松启动模板“构建”。高级是导入Json之类的助手程序集。Net读取输入,然后使用常规的旧文件I/O写入新文件。它没有什么魔力。DTE可以做一些事情,比如启动外部流程,或者在完成后显示串联的构建日志以供人工审查。

    有几个注意事项:我还没有在VS2017中使用T4,但我读过它需要 extra steps 开始使用它们,如果您使用的是早期的VS issue 在您迁移到VS2017后,他们最初不会加载您的项目。