2016-03-15 78 views
0

我有以下的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”。

+0

词典没有任何顺序。您可以改为使用SortedDictionary。 – CodeCaster

+0

soretdDictionary应该在哪里?像这样? 'JsonConvert.DeserializeObject >>( System.IO.File.ReadAllText(rankingOutput))' – Morpheus

回答

0

尝试使用Linq的结果集,如:

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

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

Dictionary是一个无序的集合。您无法对其中的任何项目有任何期望。您需要使用完全不同的数据结构,例如SortedDictionary