如何将Ext.data.TreeStore加载从文件转换为从.net webservice加载?

时间:2013-10-26 20:41:01

标签: javascript asp.net extjs extjs4

我有一个Ext.data.TreeStore,它从文本文件中读取数据:

enter image description here

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结构,而是纯文本。但它确实有效。

enter image description here

我希望获得相同的结果,但是从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(但这是我设法让它工作的方式)。

我想帮两件事:

  1. 我需要使用哪种正确的JSON格式来获得与此示例中相同的结果?
  2. 如何从webservice提供相同的数据?
  3. 谢谢!

    *****************解决方案******************

    根据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);
    } 
    

1 个答案:

答案 0 :(得分:0)

您可以尝试替换:

HttpContext.Current.Response.ContentType = "text/plain";

用这个:

HttpContext.Current.Response.ContentType = "application/json";

<强>更新 您还可以尝试在网络服务类之上添加 [ScriptService]

无论如何,我认为从Web服务读取JSON文件没有意义。您可以像在第一个代码示例中那样从JSON阅读器中读取它。我使用Web服务来处理传递的参数并做一些事情(比如一个JSON对象)来回复。