проблема в получении значения из пары ключ-значение Json - PullRequest
1 голос
/ 04 февраля 2010

Я следую по этой ссылке , чтобы создать ретранслятор на стороне клиента.

В соответствии с приведенной выше ссылкой для извлечения значения из пары ключ-значение Json мы можем использовать result [i] .property, например

for (var post in msg)
{     
    var x= msg[post].Date;
    alert(x);
}

Здесь x возвращает дату из строки Json. Когда я пытаюсь использовать то же самое с моими данными, они всегда возвращаются как undefined. Я попытался открыть alert(msg.d), который показывает хорошую строку Json со всеми моими данными. Но когда я пытаюсь msg[post].Date(property name), он всегда возвращает undefined.

Пожалуйста, помогите ..

Заранее спасибо.

Обновление:

Из серверной части я возвращаю общий список, а затем преобразую его в Json, используя следующий код.

публичная статическая строка ConvertToJSON (этот объект obj) {

    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());    

    MemoryStream ms = new MemoryStream();
    serializer.WriteObject(ms, obj);
    string jsonobj = Encoding.Default.GetString(ms.ToArray());
    ms.Dispose();
    return jsonobj;
}

затем я добавляю возвращенный Json к строителю строк и возвращаю его методу ajax Jquery. Возвращенный Json выглядит как строка, а не как объект, и поэтому я не могу получить какое-либо значение из пары ключ-значение Json ... 1028 *

Ответы [ 3 ]

1 голос
/ 04 февраля 2010

Обновление:

Похоже, вы вдвойне сериализуете данные на стороне сервера, возвращая строку JSON, которая сериализуется как сам JSON. Когда это достигает клиентской стороны и jQuery автоматически десериализует первый слой JSON, вы все равно останетесь со строкой JSON, которую вы создали вручную.

Вы должны вернуть List<T> в качестве возвращаемого значения вашего сервисного метода и позволить платформе обрабатывать сериализацию JSON.

Оригинальный ответ:

Предполагается, что объект все еще содержится в Оболочке ".d" ASP.NET AJAX , как вы и предполагали:

for (var post in msg.d) {     
  var x = msg.d[post].Date;

  alert(x);
}

Или традиционный цикл, который может быть более простым:

for (var i = 0; i < msg.d.length; i++) {
  var x = msg.d[i].Date;

  alert(x);
}
1 голос
/ 04 февраля 2010

Как насчет сообщения, если вы добавите это в свой ajax, это поможет?

dataFilter: function(data)
            {
                var msg;
                if (typeof (JSON) !== 'undefined' &&
                typeof (JSON.parse) === 'function')
                    msg = JSON.parse(data);
                else
                    msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },

Обратите внимание, что затем вы обрабатываете это как msg, а не как msg.d так:

success: function(msg)
            {
                SaveSuccess(msg);
            },
0 голосов
/ 04 февраля 2010

Похоже, вы получили массив объектов для начала, используя ваш пример следующих работ:

messages = [{"AnsNo":0,"Answer":"","Category":"Help Centre.Mortgages.Existing customers","ClickURL":null,"ID":7,"Question":"How do I re-mortgage to you?","RecNo":0,"ValidFrom":"\/Date(-62135596800000+0000)\/","ValidUntill":"\/Date(-62135596800000+0000)\/"}]

for(i in messages)
{
    message = messages[i];
    //Says "Help Centre.Mortgages.Existing customers"
    alert(message.Category)
    //To get all key/value pairs
    for(key in message)
    {
        //Alerts all key value pairs one by one
        alert("Key:" + key + ", Value:" + message[key]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...