为什么有JConstructor?

sma*_*man 11 c# linq json json.net linq-to-json

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()
Run Code Online (Sandbox Code Playgroud)

输出

 new ctorExample( 
   "value", 
   { 
     "prop1": 1, 
     "prop2": 2 
   } 
 ) 
Run Code Online (Sandbox Code Playgroud)

那么,JConstructor用于表示的类型是什么以及为什么存在?

Ath*_*ari 8

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

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