为什么有JConstructor?

Json.NET定义了一个JConstructor类型 。

这很令人困惑,因为(据我所知)构造函数不是JSON的一部分。 我仔细检查了JSON规范并浏览了json.org但却找不到任何东西。 网上任何地方似乎都没有关于此类型的文档。

因为Json.NET被如此广泛地使用(它甚至由微软委托),我认为必须有一些合理的动机将这种表示包含在对象模型中。 问题是,我决定动机的任何尝试都只是猜测。

我测试了类型及其序列化,明显的行为是只包装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规范的function。 特别是,它允许解析一些“正式”无效的JSON文件。 这包括不带引号的属性,注释,构造函数等。它包括引用的序列化和许多其他function。 某些function(如注释或不带引号的属性)以后可以成为标准的一部分。

JConstructor允许生成JavaScript应用程序使用的代码。 以这种方式序列化的数据是无效的JSON,但是有效的JavaScript代码。 无法使用JSON.parse方法解析此类JSON文件,但eval将能够处理它们。 在某些情况下它可能是有用的,但它可能是不好的做法,主要用于向后兼容现有的JS脚本,所以这可能是它没有被广告的原因。