从aspx Web表单中读取JSON数据

时间:2013-09-09 19:55:36

标签: c# asp.net json

我有一个常规ASP.Net网络表单(不是Web服务),我正在尝试吐出JSON数据,然后我尝试使用它。我有两个问题。

第一个是处理输出JSON数据:

            var reader2 = command.ExecuteReader();
            while (reader2.Read())
            {
                var json = Json.Encode(new{
                    code = reader2[1].ToString(),
                    Revenue = reader2[4].ToString()
                });

                Response.Write(json);
            }

reader2包含238个不同的条目。现在上面的Response.Write(json)返回238个单独的json字符串:

{"code":"123","Revenue":"90.0000"}{"code":"234","Revenue":"90.0000"}

如果我将它们分组为1个记录集,我认为以后(对于问题2)可能会有所帮助。

  

{“records”:[{“code”:“123”,“Revenue”:“90.0000”},{   “code”:“234”,“Revenue”:“90.0000”}}}

如何使用阅读器以及System.Web.Helpers.Json

的上述代码段完成此操作

第二个问题可能是我当前如何从第一个问题输出JSON数据的直接结果。最终,我希望能够使用此功能读取问题1中输出的内容。现在我设置了我的dataType: "html",因为这是我唯一可以归还的东西。但是,这给了我msg 32000 +的长度......有些事情是不对的。

如何才能从ASPX页面读取JSON数据输出?

    function populateResults(code, district, year) {
        $.ajax({
            type: "GET",
            url: "regular.aspx",
            data: "code=" + code + "year=" + year,
            dataType: "html",
            success: function (msg) {
                var results = msg;

                $.each(results, function (index, result) {
                    console.log(result.code);
                });
            }
        });

1 个答案:

答案 0 :(得分:1)

在我的评论之后重新阅读这个问题,现在更清楚一点,“32000”通常不是太多的数据,只是数据被视为一个大字符串而不是作为一个对象数组。

这可能是因为数据类型是HTML,这可能是必要的,因为它没有将响应视为格式正确的JSON。我认为你是正确的,它需要被“分组”,虽然它可能不需要像这样包装在父对象中。尝试使用[进行前置,附加],然后用逗号分隔。也许是这样的:

var reader2 = command.ExecuteReader();

Response.Write("[");
var firstRecord = true;

while (reader2.Read())
{
    if (!firstRecord)
        Response.Write(",");
    firstRecord = false;

    var json = Json.Encode(new{
        code = reader2[1].ToString(),
        Revenue = reader2[4].ToString()
    });
    Response.Write(json);
}

Response.Write("]");

我不得不在那里投入一点逻辑来确定何时包含逗号,因为你不想在第一条记录之前或在最后一条记录之后。可能有一种更优雅的方式,特别是如果您知道来自reader2的计数。但希望你明白了。

这应该会产生更像这样的东西:

[{"code":"123","Revenue":"90.0000"},{"code":"234","Revenue":"90.0000"}]

浏览器本身可解释为JSON。这应该允许您设置数据类型:

dataType: "json"

反过来,应该在msg中为您提供所需内容。

编辑:您可以通过将reader2的输出转换为对象的枚举并在整个事物上使用Json.Encode()来进一步简化此操作。也许是这样的:

var records = new List<CustomRecord>();

while (reader2.Read())
{
    records.Add(new CustomRecord {
        code = reader2[1].ToString(),
        Revenue = reader2[4].ToString()
    });
}

Response.Write(Json.Encode(records));

有一个简单的自定义对象:

class CustomRecord
{
    public string code { get; set; }
    public string Revenue { get; set; }
}