为什么Newtonsoft Serializer排序字典项目以及如何避免这种情况?

时间:2015-05-01 16:25:59

标签: c# json asp.net-web-api

当我有随机字符串键的字典(IDictionary)项(在C#中)时,我得到JSON对象:

{
"Y21qf39sXRU=":"A",
"/N+BQBzpdkA=":"A+",
"HQ5dFtxIsGo=":"B",
"2i4tdo427Sw=":"ACCOUNTANT",
"W6EuZP1+iKY=":"Accountant",
"eaSybclf0ww=":"Client", .... //and so on

但是当我将键更改为数字键时,字典中的项目按键排序为:

{
"1":"Closed Accounts",
"260":"A",
"283":"Client",
"334":"Accountant",
"437":"new CATEGORY",
"757":"Prospect",
"973":"A+",
"1099":"B", ....

为什么Newtonsoft.JSON序列化程序会执行此操作以及如何避免对数字键进行排序?

我想要在第一个JSON中排序的结果(从数据库中排序)。我知道我可以再次对结果进行排序,但是现在我想避免这样做。

1 个答案:

答案 0 :(得分:4)

根据定义,字典是无序的。最终如何排序通常是一些散列函数的结果。实际上,它甚至不能确定使用相同的数据集连续两次生成相同的订单。一些实现将维护秩序作为礼貌,或者如果你用一些标志强制它,但这些是黑客。如果您需要订购某些东西,则需要使用不同的数据结构。不幸的是,JSON唯一的其他结构就是数组,所以使用一个数组。如果必须有对,请使用字典数组,其中每个字典只有一个键值对。