Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON模式到C#_C#_Json_Json.net_Jsonschema_Njsonschema - Fatal编程技术网

JSON模式到C#

JSON模式到C#,c#,json,json.net,jsonschema,njsonschema,C#,Json,Json.net,Jsonschema,Njsonschema,我正在寻找一个类或工具,将JSON模式转换为C#类作为预构建步骤 我发现了几种“自制”解决方案(jsonschema.net、NJsonSchema等),但更愿意使用一些与公司/项目相关的成熟/官方代码。我知道Newtonsoft.json.Schema包只能以另一种方式完成(C#Class->json) 我惊奇地发现,VisualStudio能够使用“编辑->粘贴特殊->粘贴JSON作为类”立即完成这项工作。此功能背后的代码/类/可执行文件/dll对于预构建步骤是否可以通过编程方式访问?您应该

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

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


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

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

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

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


有几点需要注意:我还没有在VS2017中使用T4,但我已经阅读过开始使用T4的要求,如果您使用的是早期的VS,那么在迁移到VS2017后,显然存在一个初始阶段,T4不会加载到您的项目中。

正如@Stiefel所提到的,您可以。首先将
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>


在运行时该如何工作?如果要在运行时创建该类,如何在代码中访问其属性?如果您需要在运行时执行此操作,
dynamic
是否足够?如果您在编写代码时需要它,那么使用粘贴JSON作为类有什么问题?好的,我删除了问题的运行时部分,这可能是另一个问题。仅仅“将JSON粘贴为类”对我们来说不是一个好的解决方案。我们希望使用JSON模式(如IDL)为接口定义提供一个中心位置,然后在预构建期间生成C#类。您使用了吗?NJsonSchema看起来是一个成熟的项目。它有一个命令行工具nswag.exe,可用于生成如下csharp代码:“nswag jsonschema2client/input:JsonSchema.json/output:MyClasses.cs”相关: