【发布时间】:2015-07-11 12:31:56
【问题描述】:
当我有带有随机字符串键的字典 (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 中排序的结果(从数据库中排序)。我知道我可以再次对结果进行排序,但现在我想避免这样做。
【问题讨论】:
-
字典本身没有排序顺序。从字典的公共合同的角度来看,“排序顺序”(因为在序列化时必须先出现)都和另一个一样好。如果你关心键的顺序,字典不是最好的结构。
-
你为什么关心你的 json 键是如何排序的?消费者永远不应该关心 json 键的顺序。 (stackoverflow.com/questions/4515676/…)
-
这里的问题不是 Json.NET,这里的问题是,对于 c# 通用字典。 The order in which the items are returned is undefined. 即这些项目以内部哈希顺序返回,如果重新哈希表,顺序可能会改变。 AFAIK 没有内置的 c# 集合同时具有散列键访问和索引访问,但是由于您的键和值是字符串,您可以包装
NameValueCollection
标签: c# json asp.net-web-api