从 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 有啥区别?