c# - 为什么会有 JConstructor?

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

Json.NET 定义了一个 JConstructor type .

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

因为 Json.NET 的使用如此广泛(它甚至由 Microsoft 联合签名),我认为必须有一些合理的动机将这种表示形式包含在对象模型中。问题是,我任何试图确定动机的尝试都只是猜测。

我测试了类型及其序列化,明显的行为是只包装 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 文件无法使用 JSON.parse 方法进行解析,但 eval 将能够处理它们。在某些情况下它可能有用,但它可能是不好的做法,主要用于与现有 JS 脚本的向后兼容性,所以这可能是它没有被宣传的原因。

关于c# - 为什么会有 JConstructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25351479/

相关文章:

c# - Where 子句中条件的执行顺序

c# - 在表达式中将派生类转换为父类

angularjs - 使用 $http 将数据从 angularJS 发布到 Express

json - Mongoose:将 $in 运算符与 JSON 对象一起使用

asp.net-mvc - 构建与数据格式分离的 ASP.NET MVC REST API 代码的最佳方法?

c# - 连接两个表以使用嵌套集合填充 viewModel

c# - 如何在 LINQ 中按月汇总数据?

c# - System.Overflow 异常 - int32 太大或太小

c# - 连接 C# 和 Oracle 数据库

c# - Xamarin 和 native 库