使用json阅读器存储不起作用

时间:2011-12-08 20:25:07

标签: c# parsing extjs4

我在sereliaze词典后创建了以下json

{"Results":["{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}"],"Total":4}

当我尝试将其加载到extjs商店时,商店未加载

var store = Ext.create('Ext.data.Store', {
    fields: fields,
    pageSize: itemsPerPage,
    proxy: {
    type: 'ajax',
    url: getDataWithPageURL,
    reader: {
    type: 'json',
    root: 'Results',
    totalProperty: 'Total'
            }
    }
});

但是,如果我删除斜线硬编码并且它正在工作

{"Results":["{"BaseCurrency":"USD","TermCurrency":"JPY"}","{"BaseCurrency":"USD","TermCurrency":"JPY"}","{"BaseCurrency":"USD","TermCurrency":"JPY"}","{"BaseCurrency":"USD"}"],"Total":4}

我使用 Newtonsoft.Json

创建json
Dictionary<string, object> dict = new Dictionary<string, object>();

            string s = JsonConvert.SerializeObject(dist);

如何在服务器端删除斜杠以便为extjs store生成有效的json。

我试过

result = result.Replace("\"","'");

result =result.Replace("\"", @"""") 

它不能正常工作

1 个答案:

答案 0 :(得分:2)

显然,Ext不喜欢你将json对象编码为字符串然后将它们放在另一个json对象中。我有两种选择。

  1. 看看您是否可以在服务器端返回dict而不先将其转换为字符串。某些代码在某处使用您的字符串并将其放入带有“结果”和“总计”的json对象中。检查该代码是否可以按原样Dictionary

  2. 在客户端展开'结果'。一种方法是建立自己的读者:

  3. Ext.define('MyReader', {
      extend: 'Ext.data.reader.Json',
      alias: 'reader.my-json',
      read: function(object) {
        object.Results = Ext.Array.map(object.Results, Ext.decode);
        return this.callParent([object]);
      }
    });
    

    然后在您的阅读器配置中使用type: 'my-json'

    这是我的测试用例:

    var data = {"Results":["{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}","{\"BaseCurrency\":\"USD\",\"TermCurrency\":\"JPY\"}"],"Total":4};
    
    Ext.define('Currency', {
      extend: 'Ext.data.Model',
      fields: [
        { name: 'BaseCurrency', type: 'string' },
        { name: 'TermCurrency', type: 'string' }
      ]
    });
    
    Ext.define('MyReader', {
      extend: 'Ext.data.reader.Json',
      alias: 'reader.my-json',
      read: function(object) {
        object.Results = Ext.Array.map(object.Results, Ext.decode);
        return this.callParent([object]);
      }
    });
    
    var store = Ext.create('Ext.data.Store', {
      model: 'Currency',
      data: data,
      proxy: {
        type: 'memory',
        reader: {
          type: 'my-json',
          root: 'Results',
          totalProperty: 'Total'
        }
      }
    });