我正在尝试将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()
进行序列化还是对它进行反序列化?
答案 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);