当我有随机字符串键的字典(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中排序的结果(从数据库中排序)。我知道我可以再次对结果进行排序,但是现在我想避免这样做。
答案 0 :(得分:4)
根据定义,字典是无序的。最终如何排序通常是一些散列函数的结果。实际上,它甚至不能确定使用相同的数据集连续两次生成相同的订单。一些实现将维护秩序作为礼貌,或者如果你用一些标志强制它,但这些是黑客。如果您需要订购某些东西,则需要使用不同的数据结构。不幸的是,JSON唯一的其他结构就是数组,所以使用一个数组。如果必须有对,请使用字典数组,其中每个字典只有一个键值对。