关于序列化:Json.NET API从.NET类型获取JSON类型

Json.NET api to get JSON type from .NET type

使用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

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

Generate JSON Schemas
Generate JSON Schemas automatically from your existing .NET types.

从其主页上。

其文档中有一些示例,例如:

.NET类型

1
2
3
4
5
public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

生成JSON模式

1
2
3
4
5
6
7
8
9
10
11
12
13
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对其进行分析。并缓存这些分析的结果,以避免过多使用反射,这是相当慢的。

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