Json.NET定义了JConstructor
type。
这很令人困惑,因为(据我所知)构造函数不是JSON的一部分。我仔细检查了JSON spec并浏览了json.org,但无法找到任何内容。网上任何地方似乎都没有关于此类型的大量文档。
因为Json.NET被如此广泛地使用(它甚至由微软委托),我认为必须有一些合理的动机将这种表示包含在对象模型中。问题是,我决定动机的任何尝试都只是猜测。
我测试了类型及其序列化,表面行为只是包装new constructorName(...)
之类的JavaScript代码,例如:
new JConstructor("ctorExample",
new JValue("value"),
new JObject(
new JProperty("prop1", new JValue(1)),
new JProperty("prop2", new JValue(2)))
)
.ToString()
输出
new ctorExample(
"value",
{
"prop1": 1,
"prop2": 2
}
)
那么,JConstructor
类型旨在表示什么,为什么存在?
答案 0 :(得分:8)
Json.NET包含许多不属于JSON规范的功能。特别是,它允许解析一些正式和#34;无效。这包括不带引号的属性,注释,构造函数等。它包括引用的序列化和许多其他功能。某些功能(如注释或不带引号的属性)以后可以成为标准的一部分。
JConstructor
允许生成JavaScript应用程序使用的代码。以这种方式序列化的数据是无效的JSON,但是有效的JavaScript代码。无法使用JSON.parse
方法解析此类JSON文件,但eval
将能够处理它们。在某些情况下它可能有用,但它可能是不好的做法,主要是为了向后兼容现有的JS脚本,所以这可能是它没有被广告的原因。