2016-03-15 102 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