Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么会有JConstructor?_C#_Json_Linq_Json.net_Linq To Json - Fatal编程技术网

C# 为什么会有JConstructor?

C# 为什么会有JConstructor?,c#,json,linq,json.net,linq-to-json,C#,Json,Linq,Json.net,Linq To Json,Json.NET定义了一个 这令人困惑,因为(据我所知)构造函数不是JSON的一部分。我仔细检查了一下,浏览了一遍,但什么也没找到。网络上似乎也没有太多关于这种类型的文档 由于Json.NET的应用如此广泛(它甚至被微软联合签署),我认为在对象模型中包含这种表示形式是有合理动机的。问题是,就我而言,任何试图确定动机的尝试都只是猜测 我测试了该类型及其序列化,明显的行为是只包装JavaScript代码,例如new-constructorName(…),例如: new JConstructor("c

Json.NET定义了一个

这令人困惑,因为(据我所知)构造函数不是JSON的一部分。我仔细检查了一下,浏览了一遍,但什么也没找到。网络上似乎也没有太多关于这种类型的文档

由于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规范的功能。特别是,它允许解析一些“正式”无效的JSON文件。这包括不带引号的属性、注释、构造函数等。它包括引用的序列化和许多其他功能。一些特性,如注释或未加引号的属性,稍后可能成为标准的一部分

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