从JSON Schema生成C#类

时间:2011-06-15 13:49:23

标签: .net wcf json jsonschema

我正在创建一个以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创建类但我无法使其工作的工具)。

8 个答案:

答案 0 :(得分:22)

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

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

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

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

答案 1 :(得分:12)

Visual Studio 2017具有此功能。

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

enter image description here

答案 2 :(得分:6)

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

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

答案 3 :(得分:4)

  

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

我自己没有使用它,所以我不能过多地评论它,但似乎工具“json-schema-to-poco”符合你的需要。

根据其github自述文件:

  

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

答案 4 :(得分:4)

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

哪些库可以处理哪些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();
    }
}

答案 5 :(得分:3)

我今天需要这个,并没有看到你的问题有任何可靠的答案,所以我鞭打了这个。它并不完美,但它是建立起来的良好起点。

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

答案 6 :(得分:0)

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

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

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

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

答案 7 :(得分:0)

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

http://json2csharp.com/