Json.NET api to get JSON type from .NET type
使用Json.NET,是否有办法找出给定.NET类型(或实际上是
http://www.newtonsoft.com/json/help/html/serializationguide.htm
上面的文档给出了一个很好的主意,但是我可以使用Json.NET中的公共API吗?理想情况下,它还将考虑任何会影响序列化的自定义属性(例如
根据需要,最合适的解决方案是使用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域中。