为什么有JConstructor?

时间:2014-08-17 16:59:05

标签: c# json linq json.net linq-to-json

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类型旨在表示什么,为什么存在?

1 个答案:

答案 0 :(得分:8)

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

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