我正在创建一个以JSON格式返回大量数据的C#WCF Web服务。 客户端是一个iPad应用程序,目前正在由另一个团队开发,所以我正在制定规范,没有示例数据 目前,JSON字符串是由.net框架创建的,我的Web服务返回一个C#对象,其中包含然后使用DataContracts由框架序列化的所有信息。
我的问题是通信规范只包含JSON Schema文件(基于http://json-schema.org/)。为了便于开发,我想在C#中生成相应的类,但由于文件包含大量信息,并且有十几个文件,我真的不想手动创建这些类。
所以我正在寻找一种允许我使用的工具:
我找到了很多工具来针对JSON Schema验证JSON字符串或者从JSON字符串生成类,但似乎没有任何帮助我的东西。
有JSON.NET但它似乎是一个库而不是工具,我没有找到任何关于用它生成类的信息。
因此,如果有人知道工具或对如何生成这些类有一个想法(我尝试了一个用Java创建类但我无法使其工作的工具)。
答案 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)
答案 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)
我今天需要这个,并没有看到你的问题有任何可靠的答案,所以我鞭打了这个。它并不完美,但它是建立起来的良好起点。
答案 6 :(得分:0)
查看Json.NET的帮助 有一个Json.Schema命名空间可能很有用。
http://james.newtonking.com/projects/json/help/
Json.NET - 快速入门& API文档 Newtonsoft.Json.Schema命名空间 命名空间►Newtonsoft.Json.Schema
答案 7 :(得分:0)
这是一个在线类生成器,我过去用它来从一组JSON数据样本生成C#类: