Json.NET api从.NET类型中获取Json类型



使用Json.NET,是否有一种方法可以找出给定.NET类型(或实际上是MemberInfo)将被序列化为什么Json类型(数组、对象、字符串、整数等)?

http://www.newtonsoft.com/json/help/html/serializationguide.htm

上面的文档给出了一个很好的想法,但Json.NET中是否有我可以使用的公共API?理想情况下,它还将考虑任何会影响序列化的自定义属性(如JsonObjectAttribute等)

对于您的需要,最合适的解决方案是使用JSON模式。JSON.NET支持它们:

http://www.newtonsoft.com/jsonschema

其中一个功能正是您所需要的:

生成JSON架构从现有的.NET类型自动生成JSON架构。

从其主页。

它的文档中有一些例子。,像这样:

.NET类型

public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

生成JSON架构

JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(Person));
// {
//   "type": "object",
//   "properties": {
//     "Name": {
//       "type": [ "string", "null" ]
//     },
//     "Age": { "type": "integer" }
//   },
//   "required": [ "Name", "Age" ]
// }

关于许可证的注意事项

当我写下答案时,我没有意识到你需要商业使用许可证。这是许可证链接,包含在OP的评论中,@Oskar。

关于实现自定义解决方案的注意事项

执行自己的实现非常复杂,因为生成的JSON依赖于JSON.NET配置,其中可以包括从简单属性到自定义(反)序列化程序,以及其他一些配置。因此,"预测"JSON.NET将生成什么JSON真的很难。最简单的方法是:

  • 以实例化示例.NET对象
  • 序列化它
  • 并分析生成的JSON

要做到这一点非常困难,既要实例化一个有效的示例.NET对象,又要分析生成的JSON。为了简化最后一步,您可以从JSON创建一个.NET对象,并使用Reflection对其进行分析。并缓存这些分析的结果,以避免过多地使用反射,这是非常缓慢的。

不幸的是,VisualStudio中还没有JavaScript语言服务,但它将在下一个版本中提供。这将使分析生成的Javascript对象变得更加容易。请记住,JSON是一个字面上的JavaScript对象,可以很容易地实例化,但在JavaScript域中。

相关内容

  • 没有找到相关文章

最新更新