从JSON Schema生成C#类

Jul*_*n N 61 .net wcf json jsonschema

我正在创建一个C#WCF Web服务,它以JSON格式返回大量数据.客户端是一个iPad应用程序,目前正在由另一个团队开发,所以我正在研究规范,没有示例数据.
目前,JSON字符串是由.net框架创建的,我的Web服务返回一个C#对象,其中包含然后使用DataContracts由框架序列化的所有信息.

我的问题是通信规范只包含JSON Schema文件(基于http://json-schema.org/).为了便于开发,我想在C#中生成相应的类,但由于文件包含大量信息,而且有十几个文件,我真的不想手动创建这些类.

所以我正在寻找一种工具,可以让我:

  • 从JSON模式生成C#类.
  • 将JSON模式转换为XSD文件.然后创建类很容易,因为有很多工具可以从XSD生成类.

我找到了许多工具来验证JSON模式的JSON字符串,或者从JSON字符串生成类,但似乎没有任何帮助我的东西.
JSON.NET,但它似乎是一个库,而不是一个工具,我没有找到任何有关使用它生成类的信息.

所以,如果有人知道一个工具或者有关于如何生成这些类的想法(我尝试了一个用Java创建类但我无法使其工作的工具).

Ro *_*Hit 32

在nuget上查找这个库.的NJsonSchema.CodeGeneration可用于生成从JSON模式C#或打字稿代码:

var generator = new CSharpGenerator(schema);
var file = generator.GenerateFile();
Run Code Online (Sandbox Code Playgroud)

文件变量现在包含JSON模式中定义的所有类的C#代码.

我需要一个今天生成的类,但找不到任何可以将json模式转换为c#类的网站,所以使用了上面提到的库并快速写了一些东西http://json2csharp.rohitl.com/希望这有帮助.

  • 还将指出您实际上需要添加至少两个包才能完成此工作... NJsonSchema.CodeGeneration(添加其他 pkg,如 NJsonSchema)和 NJsonSchema.CodeGeneration.CSharp。 (4认同)
  • @rico-suter 没有人正确解释过如何在生成代码时加载文件夹中的所有参考模式。直到今天,任何网站上都没有一个例子。 (2认同)
  • 现在,这是 json2csharp 转换器工具 https://json2csharp.com 的正确 URL。 (2认同)

小智 23

Visual Studio 2017具有此功能.

从菜单中,选择"编辑","选择性粘贴","将JSON粘贴为类".粘贴在JSON中,Visual Studio将创建所需的类.

在此输入图像描述

  • 不适用于SCHEMA ...只是一个JSON字符串 (13认同)
  • 为有用的信息投票。然而,最好使用模式,因为它们指定可选/必需的属性、默认值等。从数据生成类时,这些详细信息会丢失。因此,您最终可能会得到结构上正确的东西,但实际上并不符合所需的规格。 (3认同)
  • 谢谢,它对我很有用,你节省了我很多时间:) (2认同)

Ric*_*ter 7

您可以使用库NJsonSchema读取JSON模式或从类型生成JSON模式,并从中生成C#类.

如果您需要用于执行这些任务的GUI,可以尝试使用NSwag工具中的NSwagStudio GUI 来执行此操作...(它也基于NJsonSchema)

  • 你应该披露你是真正的开发者 (4认同)

Ogg*_*las 7

为了正确回答这个问题,您需要知道 Json Schema 的版本(草案)。

哪些库可以处理哪些架构的示例 (2018-01-19):

Json.NET Schema supports draft 3, draft 4, draft 6 (MIT)
Manatee.Json supports draft 4, draft 6, draft 7 (MIT)
NJsonSchema supports draft 4 (Ms-PL)
Run Code Online (Sandbox Code Playgroud)

http://json-schema.org/implementations.html#validator-dotnet

由于NJsonSchema.CodeGeneration您也不能直接发送实际的 JSON,您首先需要将其转换为实际的模式(您经常会收到错误:Unable to cast object of type 'System.String' to type 'NJsonSchema.JsonSchema4否则)。

运行代码示例,Schemas文件夹位于项目根目录:

class Program
{
    static void Main(string[] args)
    {
        var location = Assembly.GetExecutingAssembly().Location;
        var path = Path.GetFullPath(Path.Combine(location, @"..\..\..\Schemas"));
        var schemaJson = File.ReadAllText($"{path}Test.json");
        var schema = JsonSchema4.FromJsonAsync(schemaJson).Result;
        var generator = new CSharpGenerator(schema);
        var generatedFile = generator.GenerateFile();
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

所以我正在寻找一个工具,它可以让我:从 JSON 模式生成 C# 类...

我自己没有使用过它,所以我不能对它发表太多评论,但似乎工具“ json-schema-to-poco ”可以满足您的需求。

根据其 github 自述文件:

将 JSON 架构文件转换为 C# 中的普通旧式 CLR 对象。对于作为自动构建过程的一部分运行很有用。


Car*_*lla -1

查看 Json.NET 的帮助\n有一个 Json.Schema 命名空间可能很有用。

\n\n

http://james.newtonking.com/projects/json/help/

\n\n

Json.NET - 快速入门和 API 文档\nNewtonsoft.Json.Schema 命名空间\n命名空间 \xe2\x96\xba Newtonsoft.Json.Schema

\n\n

项目页面: http: //json.codeplex.com/

\n