使用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域中。