2013-10-04 85 views
2

我正在尋找使用JSON.net將JSON結構反序列化爲字典。訣竅是JSON文檔是嵌套對象的層次結構,但我只想查看頂級屬性+值對。自定義JSON.net反序列化爲字典<string,string>

例如,

{ 
    "prop1": 142, 
    "prop2": "Some description", 
    "object_prop": { 
     "abc": 2, 
     "def": { 
      "foo": "hello", 
      "bar": 4 
     } 
    } 
} 

根據上面的例子,我想有我反序列化的詞典有它的3項:「爲prop1」,「PROP2」和「object_prop」。 「object_prop」應該只是一個字符串(我將在以後的某個時間點反序列化到一個對象。)

注意:我正在尋找這樣做,因爲我想創建一個剛剛知道的可重用庫頂級鍵/值對,以及消費庫的客戶端可以在稍後的時間點定義值的類型(即,我不希望我的可重用庫綁定到對象類型......即「 object_prop「)

回答

4

如何像這樣

class Program 
{ 
    static void Main(string[] args) 
    { 
     string json = @" 
     { 
      ""prop1"": 142, 
      ""prop2"": ""Some description"", 
      ""object_prop"": { 
       ""abc"": 2, 
       ""def"": { 
        ""foo"": ""hello"", 
        ""bar"": 4 
       } 
      }, 
      ""prop3"": 3.14 
     }"; 

     Dictionary<string, string> dict = new Dictionary<string, string>(); 
     JObject jo = JObject.Parse(json); 

     foreach (JProperty prop in jo.Properties()) 
     { 
      if (prop.Value.Type == JTokenType.Array || 
       prop.Value.Type == JTokenType.Object) 
      { 
       // JSON string for complex object 
       dict.Add(prop.Name, prop.Value.ToString(Formatting.None)); 
      } 
      else 
      { 
       // primitive value converted to string 
       object value = ((JValue)prop.Value).Value; 
       dict.Add(prop.Name, value != null ? value.ToString() : null); 
      } 
     } 

     foreach (KeyValuePair<string, string> kvp in dict) 
     { 
      Console.WriteLine(kvp.Key + " = " + kvp.Value); 
     } 
    } 
} 

輸出:?

prop1 = 142 
prop2 = Some description 
object_prop = {"abc":2,"def":{"foo":"hello","bar":4}} 
prop3 = 3.14 
+0

完美!我正在走向一個定製的JsonConverter,它看起來過於複雜。謝謝! :) –

+0

沒問題;樂意效勞。 –

相關問題