javascript - 为什么从字典返回 JsonResult 会改变排序顺序?

标签 javascript c# jquery asp.net-mvc

我有以下 Controller 操作:

public JsonResult GetInvestors(int bank)
{
    var investors = _context.Investors
    .Where(i => i.BankNumber == bank)
    .Select(i => new { InvestorId = i.InvestorId.ToString(), InvestorName = i.InvestorName + " (" + i.BankNumber + ")" })
    .OrderBy(i => i.InvestorName)
    .ToDictionary(i => i.InvestorId, i => i.InvestorName);

    return Json(investors, JsonRequestBehavior.AllowGet);
}

下面的 javascript 调用该操作,现在仅启动调试器,以便我可以浏览结果:

function getInvestors(bank)
{
    $.ajax
    ({
        url: "/InvestorDetail/GetInvestors",
        type: "POST",
        data: { bank: bank },
        dataType: "json",
        success: function (returnedData) { debugger; }
    });
}

如果我在 Controller 操作中观看investors,它会按投资者姓名排序,这就是我想要的。但是,当我进入 javascript 调试器并查看 returnedData 时,数据会按投资者 ID 排序。

或者,如果我将 OrderBy 放在 ToDictionary 之后并按 Value 排序,则在 javascript 调试器中,结果的 json 结构会有所不同,但它会像我想要的那样按投资者姓名排序。

为什么从字典返回时排序顺序会改变?

谢谢。

最佳答案

出于枚举的目的,字典中的每个项目都被视为表示值及其键的 KeyValuePair 结构。返回项目的顺序未定义。

参见official msdn documentation

不过,您可以使用排序字典,或者在客户端对其进行正确排序。

关于javascript - 为什么从字典返回 JsonResult 会改变排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58528433/

相关文章:

javascript - 监控js错误

循环内的 JavaScript 闭包——简单实用的例子

c# - 如何在for循环中迭代日期?

c# - 用数字命名的 child 不好吗?

javascript - $.getScript 用于数组的每个元素

JavaScript 警报不显示

javascript - jQuery - 放置一个带偏移量的 div,然后再次放置 = 不同的结果

javascript - 是否可以使用 NodeMailer 将回复字段设置为抄送?

javascript - 在 JavaScript 中的自定义对象中使用原型(prototype)

c# - 一键选择同一个ListBox中的多个ListBox项目