Магазин с JSON Reader не работает - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть следующий 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}

Я создаю JSON с помощью Newtonsoft.Json

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

            string s = JsonConvert.SerializeObject(dist);

Как можно удалить косую черту на стороне сервера, чтобы произвестидействительный json для магазина extjs.

Я пытался

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

И

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

Не работает

1 Ответ

2 голосов
/ 09 декабря 2011

Очевидно, что Ext не нравится, что вы закодировали объект json как строку, а затем поместили их в другой объект json.У меня есть два варианта:

  1. Посмотрите, можете ли вы вернуть dict на стороне сервера без предварительного преобразования его в строку.Какой-то код где-то берет вашу строку и помещает ее в объект json с «Results» и «Total».Проверьте, может ли этот код принимать Dictionary как есть.

  2. Разверните свойство «Results» на стороне клиента.Один из способов - создать свой собственный ридер:

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'
    }
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...