您准确地描述了您需要做什么。
我们使用 C# 查询我们的数据库以获取数据,然后将其转换为 json。我们现在使用多种技术进行 json 序列化。我会推荐使用 JSON.NET。这是 .NET MVC 团队将要使用的。我不会使用当前属于 .NET 的 DataContractSerialization。
http://json.codeplex.com/
我们有时将 JSON 放在页面上,然后 javascript 将其作为页面变量访问。其他时候,我们在 .NET 中调用服务。我们使用 WCF,我们还使用 .ashx 文件为 Web 客户端提供 json 数据。
json 的结构将是您的 dojo 小部件和 Web 服务器之间的契约。我会使用图表小部件或商店需要的东西来开始定义合同的过程。
编辑
WCF 接口
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/data/{service}/",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
String RetrieveData(string service, Stream streamdata);
该实现返回一个字符串,即 json。这以 json 格式发送到浏览器,但它由 .NET 通过 xml 节点包装。我有一个清理它的实用程序功能。
MyUtil._xmlPrefix =
'<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">';
MyUtil._xmlPostfix = '</string>';
MyUtil.CleanJsonResponse = function(data) {
// summary:
// a method that cleans a .NET response and converts it
// to a javascript object with the JSON.
// The .NET framework, doesn't easily allow for custom serialization,
// so the results are shipped as a string and we need to remove the
// crap that Microsoft adds to the response.
var d = data;
if (d.startsWith(MyUtil._xmlPrefix)) {
d = d.substring(MyUtil._xmlPrefix.length);
}
if (d.endsWith(MyUtil._xmlPostfix)) {
d = d.substring(0, d.length - MyUtil._xmlPostfix.length);
}
return dojo.fromJson(d);
};
// utility methods I have added to string
String.prototype.startsWith = function(str) {
return this.slice(0, str.length) == str;
};
String.prototype.endsWith = function(str) {
return this.slice(-str.length) == str;
};