如何将Dictionary <string,int =“”>()。OrderByDescending(kvp => kvp.Value)序列化/反序列化为Json?

时间:2019-04-01 09:34:34

标签: c# json

我正在尝试将Dictionary序列化为.json文件,并将其从当前文件中反序列化。

我有下一个代码:

string filePath = AppDomain.CurrentDomain.BaseDirectory;

Dictionary<string, int> dict = new Dictionary<string, int>() {   
    { "aaa", 1},
    { "bbb", 2},
    { "ccc", 3}
};

这很好

File.WriteAllText(filePath + "IndexedStrings.json", JsonConvert.SerializeObject(dict, Newtonsoft.Json.Formatting.Indented));

结果是:

{
    "aaa": 1,
    "bbb": 2,
    "ccc": 3
}

但是当我使用此功能时:

File.WriteAllText(filePath + "IndexedStrings.json", JsonConvert.SerializeObject(dict.OrderByDescending(kvp => kvp.Value), Newtonsoft.Json.Formatting.Indented));

结果是:

[
    {
        "Key": "ccc",
        "Value": 3
    },
    {
        "Key": "bbb",
        "Value": 2
    },
    {
        "Key": "aaa",
        "Value": 1
    }
]

我应该使用其他方式对Dictionary()进行序列化还是对它进行反序列化?

1 个答案:

答案 0 :(得分:2)

正如其他人指出的那样,通常您不必关心对象属性的顺序。这是对象和数组之间的根本区别之一。

但是,如果您坚持要求,则可以从预定对中手动构建一个JObject,然后对其进行序列化:

var jObj = new JObject();

foreach (var kv in dict.OrderByDescending(x => x.Value))
{
    jObj.Add(kv.Key, kv.Value);
}

var result = JsonConvert.SerializeObject(jObj, Newtonsoft.Json.Formatting.Indented);