如何读取包含用户定义类的对象数组的JSON响应

本文关键字:对象 数组 响应 JSON 定义 用户 何读取 读取 包含 | 更新日期: 2023-09-27 17:51:22

我正在开发一个ASP。. NET WebForms网站,使用JQuery从ASP. NET中获取一些数据。. NET ASHX处理程序。该数据是用户定义的类的对象数组。下面是Handler的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using WRG_2._1.WRGCore;
namespace WRG_2._1.Handlers
{
    /// <summary>
    /// Summary description for ResponseFetcher
    /// </summary>
    public class ResponseFetcher : IHttpHandler, System.Web.SessionState.IReadOnlySessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            List<Topic> comments = new List<Topic>() {
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
                new Topic(){ Title=DateTime.Now.ToString() +":"+ DateTime.Now.Millisecond },
            };
            JavaScriptSerializer jss = new JavaScriptSerializer();
            string sJSON = jss.Serialize(comments);
            context.Response.Write(sJSON);
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

我从JQuery Ajax获取数据,像这样:

$(document).ready(function () {
            var url = '/Handlers/ResponseFetcher.ashx';
            $.ajax({
                url: url,
                type: "POST",
                data:
                    JSON.stringify({ val1: 2, val2: 3 })
                ,
                dataType: "json",
                cache: true,
                beforeSend: function () {
                    now = (new Date()).getTime();
                    if (localCache.exist(url)) {
                        tDiff = now - cacheTime;
                        if (tDiff < 20000) {
                            loadData(localCache.get(url));
                            return false;
                        }
                    }
                    return true;
                },
                complete: function (jqXHR, textStatus) {
                    localCache.set(url, jqXHR, loadData);
                }
            });
        });
        function loadData(data) {
            console.log(data);
            $(data.responseJSON).each(function (i) {
                $('#responsecontainer').html = data.responseJSON[i].Title;
            });
        }

函数loadData()完美地获得了数据。但它没有添加到#responsecontainerdiv。请帮助!

注意类Topic也可以有null变量

如何读取包含用户定义类的对象数组的JSON响应

jQuery的。html是一个方法。通过将新值作为参数传递,可以将其用作setter:

$('#responsecontainer').html(data.responseJSON[i].Title);

但是这将迭代地用数据中的每个. title填充#responsecontainer。reponseJSON对象,每个。title替换最后一个。title,所以您只会看到最后一个。title。您可能想要附加:

$('#responsecontainer').append(data.responseJSON[i].Title);

以这种方式返回它你真的在data对象上有responseJSON属性吗?

根据我的经验返回它的方式,我已经得到了结果直接在数据对象:

$(data).each(function (i) {
    $('#responsecontainer').append(data[i].Title);
});

问题是JSON响应的解析。我将loadData()函数的代码转换为:

function loadData(data) {
            var resdata = JSON.parse(data.responseText);
            console.log(resdata[0].Title);
            $(resdata).each(function (i) {
                $('#responsecontainer').append(resdata[i].Title);
            });
        } 

现在它工作了。感谢所有回答我问题的人。你的回答给了我这个提示。:)