15

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要表示的类型是什么,它为什么存在呢?

4

1 回答 1

13

Json.NET 包含许多不属于 JSON 规范的特性。特别是,它允许解析一些“正式”无效的 JSON 文件。这包括未引用的属性、注释、构造函数等。它包括引用的序列化和许多其他功能。一些特性,如注释或未引用的属性,可以在以后成为标准的一部分。

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

于 2014-08-17T17:22:17.323 回答