2016-05-23 89 views
0

我想反序列化JSON並以最小的複雜性來反轉鍵/值。我有一個輸入的json,看起來像:C#反序列化JSON到字典和反向KV

{ 
    "1":"apple", 
    "2":"banana", 
    "3":"orange", 
    "4":"grape" 
} 

而想要序列化此爲Dictionary<string,string>,但扭轉字典這樣的水果是key和整數是value。任何方式來達到與Newtonsoft.Json

var obj = JsonConvert.DeserializeObject<Dictionary<string,string>>(json); 
// obj.Keys = { "1", "2", "3" }, but I want them to be { "apple", "banana", ... } 
+0

*「複雜性最小」*代碼複雜度?時間複雜性?內存複雜? –

回答

3

最不復雜的方法是剛剛創建另一個字典從你deserialised之一:

JsonConvert.DeserializeObject<Dictionary<string,string>>(json) 
    .ToDictionary(x => x.Value, x => x.Key); 
+0

完美 - 謝謝! –

0
var obj = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); 
      Dictionary<string, string> temp = new Dictionary<string, string>(); 
      Parallel.ForEach(obj, (item)=> { 
       temp.Add(item.Value, item.Key); 
      }); 

這是你能做到這一點的簡單方式。

+0

'Dictionary '不是線程安全的。您不應該從多個線程修改一個線程,例如從'Parallel.ForEach'。 – yaakov

+0

'Parallel.ForEach'是一種簡化的方式?真? –

+0

是的。這是一種簡化的方式,並且在大數據的情況下也會花費更少的時間。 –