将 Json 解析为模式生成的 类 集
Parse Json into a schema-generated set of classes
我有一个 Json 架构,可以使用 NJsonSchema.CodeGeneration.CSharp
创建与之对应的 classes。因此,如果我有符合模式的 json,我应该能够轻松地将其解析为对象集合,这些对象的 classes 是从模式生成的 classes?
那么我该怎么做 - 解析 json 并取出与 json 中的对象(由模式定义)相对应的 C# class 对象?
举个例子——如果模式定义了第一个对象定义,它是第二个对象定义的数组,那么我希望能够以输出是 class 对应于第一个对象定义,它有一个成员,它是对应于第二个定义的 class 实例的 List
。似乎模式知道执行此操作所需的所有信息,因此它应该是一行 - 我很感激我可以进行长时间的解析(例如转换数组中的每个项目)以获得相同的结果。
我认为这是从模式生成 C# classes 的主要目的,那么我缺少的神奇方法是什么?
我也很乐意编写 C# classes 并从中生成一个模式,如果它是一个更可行的解决方案。
我使用过 NJsonSchema
但很高兴使用任何其他 C# json 架构和代码生成技术来达到相同的目的。
更新:经过讨论,我发现如果 NJsonSchema
用于从模式生成 classes,那么每个 classes 的 TypeScript
版本有一个 fromJS
方法,听起来像我想要的,但 C# 版本中缺少它们。如果它提供解决方案,我很乐意使用 NJsonSchema
以外的东西从模式生成 classes。
我想我找到了答案,这比我预期的要简单得多。只需使用类似的东西:
var ob=JsonConvert.DeserializeObject<MyNamespace.Anonymous>(jsonString);
...其中MyNamespace
是生成的C#classes的命名空间,MyNamespace.Anonymous
是schema根对应的class(默认名称来自 NJsonSchema
),jsonString
要解析的字符串。
我认为解决方案需要 schema-aware,因为它需要了解从架构创建的所有 classes,但我猜它 'works that out' 来自反射在 Anonymous
class 上给出了它的属性 classes,反映了那些等等。
我是over-thinking问题所在!
我有一个 Json 架构,可以使用 NJsonSchema.CodeGeneration.CSharp
创建与之对应的 classes。因此,如果我有符合模式的 json,我应该能够轻松地将其解析为对象集合,这些对象的 classes 是从模式生成的 classes?
那么我该怎么做 - 解析 json 并取出与 json 中的对象(由模式定义)相对应的 C# class 对象?
举个例子——如果模式定义了第一个对象定义,它是第二个对象定义的数组,那么我希望能够以输出是 class 对应于第一个对象定义,它有一个成员,它是对应于第二个定义的 class 实例的 List
。似乎模式知道执行此操作所需的所有信息,因此它应该是一行 - 我很感激我可以进行长时间的解析(例如转换数组中的每个项目)以获得相同的结果。
我认为这是从模式生成 C# classes 的主要目的,那么我缺少的神奇方法是什么?
我也很乐意编写 C# classes 并从中生成一个模式,如果它是一个更可行的解决方案。
我使用过 NJsonSchema
但很高兴使用任何其他 C# json 架构和代码生成技术来达到相同的目的。
更新:经过讨论,我发现如果 NJsonSchema
用于从模式生成 classes,那么每个 classes 的 TypeScript
版本有一个 fromJS
方法,听起来像我想要的,但 C# 版本中缺少它们。如果它提供解决方案,我很乐意使用 NJsonSchema
以外的东西从模式生成 classes。
我想我找到了答案,这比我预期的要简单得多。只需使用类似的东西:
var ob=JsonConvert.DeserializeObject<MyNamespace.Anonymous>(jsonString);
...其中MyNamespace
是生成的C#classes的命名空间,MyNamespace.Anonymous
是schema根对应的class(默认名称来自 NJsonSchema
),jsonString
要解析的字符串。
我认为解决方案需要 schema-aware,因为它需要了解从架构创建的所有 classes,但我猜它 'works that out' 来自反射在 Anonymous
class 上给出了它的属性 classes,反映了那些等等。
我是over-thinking问题所在!