【问题标题】:Deserialize and sort反序列化和排序
【发布时间】:2016-03-15 13:59:16
【问题描述】:

我有如下json格式文件,rankingOutput

{
    "12345": {
        "ABC": {
            "rank": 3, 
            "Comments": [
                "Good"
            ]
        }, 
        "DEF": {
            "rank": 2, 
            "Comments": [
                "Good"
            ]
        }, 
        "GHI": {
            "rank": 1, 
            "Comments": [
                "Bad"
            ]
        }
    }
}

我有以下反序列化代码

JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, RankingsClass>>>(
                                               System.IO.File.ReadAllText(rankingOutput));

    public class RankingsClass
    {
        public int rank;
        public string[] comments;
    }    

虽然上面的代码可以正确反序列化它,但我想知道是否有一个选项可以让我的反序列化器返回字符串“ABC”、“DEF”和“GHI”,根据排名字段升序排列。

【问题讨论】:

  • 字典没有任何排序。您可以改用 SortedDictionary。
  • soretdDictionary 应该在哪里?像这样的东西? JsonConvert.DeserializeObject&lt;SortedDictionary&lt;string, SortedDictionary&lt;string, RankingsClass&gt;&gt;&gt;( System.IO.File.ReadAllText(rankingOutput))

标签: c# json json.net


【解决方案1】:

尝试在结果集上使用 Linq,例如:

List<RankingsClass> list = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, RankingsClass>>>(System.IO.File.ReadAllText(rankingOutput));

return list.OrderByDescending(c => c.rank);

【讨论】:

    【解决方案2】:

    Dictionary 是一个无序集合。对于其中的物品,您根本无法对任何订单有任何期望。您需要使用完全不同的实际排序的数据结构,例如SortedDictionary

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 2018-06-14
      • 1970-01-01
      • 2013-04-19
      • 2018-12-05
      相关资源
      最近更新 更多