我有一个Ext.data.TreeStore,它从文本文件中读取数据:
this.store = Ext.create('Ext.data.TreeStore', {
model: "GeoExt.data.LayerTreeModel",
proxy: new Ext.data.HttpProxy({
url: 'data/test.json',
reader: {
type: 'json',
root: 'children',
idProperty: 'Id'
}
}),
folderSort: true
});
这是文件内容:
[
{
text: "Category1",
leaf: false,
expanded: true,
checked: false,
children: [
{
text: "A1",
layer: "A2",
name: "A3",
leaf: true,
checked: false,
nodeType: "gx_layer"
},
{
text: "B1",
layer: "B2",
name: "B3",
leaf: true,
checked: false,
nodeType: "gx_layer"
}
],
nodeType: "gx_layer"
},
{
text: "Category2",
leaf: false,
expanded: true,
checked: false,
children: [
{
text: "C1",
layer: "C2",
name: "C3",
leaf: true,
checked: false,
nodeType: "gx_layer"
}],
nodeType: "gx_layer"
}
]
我在firebug中注意到get不返回JSON结构,而是纯文本。但它确实有效。
我希望获得相同的结果,但是从webservice获取树节点(从postgres返回)。
我尝试的第一个最简单的事情是(也尝试过text / json):
[WebMethod]
public void GetJSON()
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "text/plain";
HttpContext.Current.Response.Charset = "utf-8";
string res = File.ReadAllText(@"D:\test.json");
HttpContext.Current.Response.Write(res);
}
我收到错误:
Request format is unrecognized for URL unexpectedly ending in '/getJSON'.
这是有道理的,因为该文件不是JSON(但这是我设法让它工作的方式)。
我想帮两件事:
谢谢!
*****************解决方案******************
根据Meister的回答,该方法需要如下所示:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetJSON()
{
Object res = new Object();
JavaScriptSerializer js = new JavaScriptSerializer();
string str = js.Serialize(res);
Context.Response.Clear();
Context.Response.ContentType = "application/json";
Context.Response.AddHeader("content-disposition", "attachment; filename=export.json");
Context.Response.Flush();
Context.Response.Write(str);
}
答案 0 :(得分:0)
您可以尝试替换:
HttpContext.Current.Response.ContentType = "text/plain";
用这个:
HttpContext.Current.Response.ContentType = "application/json";
<强>更新强>
您还可以尝试在网络服务类之上添加 [ScriptService]
。
无论如何,我认为从Web服务读取JSON文件没有意义。您可以像在第一个代码示例中那样从JSON阅读器中读取它。我使用Web服务来处理传递的参数并做一些事情(比如一个JSON对象)来回复。