75

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

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

所以我正在寻找一种可以让我使用的工具:

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

我找到了很多工具来针对 JSON Schema 验证 JSON 字符串或从 JSON 字符串生成类,但似乎对我没有任何帮助。
JSON.NET,但它似乎是一个库而不是工具,我没有找到任何关于使用它生成类的信息。

因此,如果有人知道工具或对如何生成这些类有想法(我尝试了一个在 Java 中创建类的工具,但我无法使其工作)。

4

8 回答 8

56

Visual Studio 2017 具有此功能。

从菜单中,选择编辑、选择性粘贴、将 JSON 粘贴为类。粘贴到 JSON 和 Visual Studio 中将创建所需的类。

在此处输入图像描述

于 2018-04-20T19:04:35.740 回答
44

在 nuget 上查找这个库。NJsonSchema.CodeGeneration用于从 JSON 模式生成 C# 或 TypeScript 代码:

var generator = new CSharpGenerator(schema);
var file = generator.GenerateFile();

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

于 2016-04-05T11:23:39.287 回答
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)

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();
    }
}
于 2018-01-19T15:46:29.497 回答
7

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

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

于 2015-10-24T07:09:35.277 回答
4

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

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

根据其 github 自述文件:

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

于 2014-07-12T07:12:48.733 回答
3

这是一个在线类生成器,我过去曾使用它从一组 JSON 数据样本中生成 C# 类:

http://json2csharp.com/

于 2014-07-07T19:55:18.430 回答
3

我今天需要这个,但没有看到任何可靠的答案来回答你的问题,所以我提出了这个。它并不完美,但它是一个很好的起点。

https://gist.github.com/rushfrisby/c8f58f346548bf31e045

于 2014-07-25T20:33:22.427 回答
-1

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

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

Json.NET - 快速入门和 API 文档 Newtonsoft.Json.Schema 命名空间 命名空间 ► Newtonsoft.Json.Schema

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

于 2011-06-15T15:38:56.183 回答