Json.NET 定义了一个JConstructor
类型。
这很令人困惑,因为(据我所知(构造函数不是 JSON 的一部分。我仔细检查了 JSON 规范并浏览了 json.org 但找不到任何东西。网络上任何地方似乎也没有太多关于这种类型的文档。
由于 Json.NET 被广泛使用(它甚至由Microsoft共同签名(,我认为必须有一些合理的动机才能在对象模型中包含此表示形式。问题是,我试图确定动机的任何尝试都只不过是猜测。
我测试了该类型及其序列化,明显的行为是仅包装 JavaScript 代码,例如 new constructorName(...)
,例如:
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
类型旨在表示什么,为什么存在?
Json.NET 包含许多不属于JSON规范的功能。特别是,它允许解析一些"正式"无效的JSON文件。这包括未引号的属性、注释、构造函数等。它包括引用的序列化和许多其他功能。某些功能(如注释或未引用的属性(以后可以成为标准的一部分。
JConstructor
允许生成可供 JavaScript 应用程序使用的代码。 以这种方式序列化的数据是无效的 JSON,但有效的 JavaScript 代码。此类 JSON 文件无法使用JSON.parse
方法解析,但eval
将能够处理它们。在某些情况下,它可能很有用,但这可能是不好的做法,主要用于与现有JS脚本的向后兼容性,所以这可能是它没有被宣传的原因。