0

我有一个常规的 ASP.Net Web 表单(不是 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)可能会有所帮助。

{“记录”:[{“代码”:“123”,“收入”:“90.0000”},{“代码”:“234”,“收入”:“90.0000”}]}

我将如何使用阅读器和上面的代码片段来做到这一点System.Web.Helpers.Json

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

我需要做什么才能从我的 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);
                });
            }
        });
4

1 回答 1

1

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

这可能是因为数据类型是 HTML,这可能是必要的,因为它没有将响应视为格式正确的 JSON。我认为它需要“分组”是对的,尽管它可能不需要像这样包装在父对象中。尝试在前面加上 a [,在后面加上 a ],并用逗号分隔每个。也许是这样的:

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; }
}
于 2013-09-09T20:16:26.700 回答