从 JavaScriptSerializer 生成时用于 JavaScript 的 Visual Studio Intellisense

Posted

技术标签:

【中文标题】从 JavaScriptSerializer 生成时用于 JavaScript 的 Visual Studio Intellisense【英文标题】:Visual Studio Intellisense for JavaScript when generated from JavaScriptSerializer 【发布时间】:2011-11-04 21:27:18 【问题描述】:

在使用javascriptSerializer 创建客户端对象时,在 Visual Studio 2010 中获取 JavaScript Intellisense 的正确方法是什么?

例如,我有一个名为Record 的类,它有几个属性;我正在生成Records 的集合,然后使用JavaScriptSerializer 对它们进行序列化。

代码背后

public string JsonRecords

    get
    
        var js = new System.Web.Script.Serialization.JavaScriptSerializer();
        return js.Serialize( Records );
    

ASPX 页面

<script>
  // mocks the Record object
  var records = [ "Date": "", "Latitude": 0, "Longitude": 0 ];

  // sets the Record object
  records = <%= JsonRecords %>;
</script>

当我预填充 JS 记录变量以模拟 Records 类时,我获得了 Visual Studio 的完整智能支持。

这可行,但感觉很脏。有没有更合适的方法?或者这是一种常见的做法?

【问题讨论】:

【参考方案1】:

在 Visual 中获取 JavaScript Intellisense 的正确方法是什么 Studio 2010 什么时候通过 JavaScriptSerializer 创建对象?

等待 VSNext 或一些可以启用这种情况的补丁。目前不支持将 javascript 与服务器端代码混合使用的场景中的 Intellisense。

【讨论】:

【参考方案2】:

Javascript intellisense 是通过解析脚本本身生成的,因此除非您在脚本(或引用的脚本)中定义了内联属性,否则您将看不到 intellisense。

如果您想与智能感知一起使用但最终将通过动态构造提供的结构,那么您可以将它们存根到不同的 .js 文件中,然后在文件中包含参考标记:

/// <reference path="../xxx.js" />

这将被视为客户端中的注释,但 Visual Studio 会在您处理代码时提取它。 Minifiers/uglifiers 将在这些 cmets 投入生产之前将其移除,因此它们不会影响性能。

【讨论】:

以上是关于从 JavaScriptSerializer 生成时用于 JavaScript 的 Visual Studio Intellisense的主要内容,如果未能解决你的问题,请参考以下文章

JavaScriptSerializer 可以排除具有空值/默认值的属性吗?

从 C# 程序中反序列化 JSON 时,我是不是需要使用 JavaScriptSerializer 以外的任何东西?

JavaScriptSerializer.Deserialize - 如何更改字段名称

DataContractJsonSerializer 和 JavaScriptSerializer 有啥区别?

使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组

指定分配索引值时,JavaScriptSerializer 不使用枚举 [重复]