2017-08-17 51 views
0

我想從一個JSON使用C#獲得「水果」,「動物」,「數字」,我也想得到「水果」,「動物」和「數字」中的值我正在使用json.net,但我無法弄清楚如何獲得我想要的數據。我怎麼能得到JSON對象內的值和對象本身的名稱在C#

{ 
    "fruits":[ 
     "apple", 
     "orange", 
     "grapes", 
     "banana" 
    ], 
    "animals":[ 
     "cat", 
     "dog", 
     "lion", 
     "bird", 
     "horse" 
    ], 
"numbers":[ 
     "1", 
     "2", 
     "3", 
     "4", 
     "5" 
    ] 
} 

我知道我可以有這個

public class RootObject 
{ 
    public List<string> fruits { get; set; } 
    public List<string> animals { get; set; } 
    public List<string> numbers { get; set; } 
} 

做到這一點,但是當我添加另一個對象喜歡的顏色,所以我需要添加

public List<string> colors{ get; set; } 

我想要的僅僅是簡單地得到對象名稱及其值,而不必定義新的屬性。

我知道這是已經回答,如果有任何請只是評論一些鏈接。

+0

'不必創建一個新的構造函數'你的構造函數是什麼意思? – CodeNotFound

+1

爲什麼不反序列化爲'Dictionary >'而不是? – zerkms

+0

@CodeNotFound 我的意思是沒有創建另一個 公開名單 colors {get;組; } –

回答

0

你說得對,你不能使用類,而解析給定的JSON因爲你JSON數據是不固定的,並沒有涉及到具體的項目,這就是爲什麼它在那裏你可以讓內使用dynamic對象的地方字典。 以下示例演示如何使其工作。我添加了2個項目,即汽車和筆記本電腦

string json = "{'fruits':['apple','orange','grapes','banana']," + 
         "'animals':['cat','dog','lion','bird','horse' ]," + 
         "'cars':['bmw','mustang','suzuki']," + 
         "'laptops':['hp','acer','samsung','microsoft','mac' ]," + 
         "'numbers':['1','2','3','4','5' ]}"; 
     var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json); 
     foreach (var item in dict) 
     { 
      var objName = item.Key; 
      var items = item.Value; 
     } 

這裏是執行上面的代碼。希望能幫助到你。

Code Execution

+0

太棒了!謝謝。 –

1

您可以使用一個通用的字典您的類型,與Newtonsoft JSON庫反序列化。假設你的JSON樣本是在文件C:\ TEMP \ json.txt:

string json = File.ReadAllText(@"C:\Temp\json.txt"); 

var stuff = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(json); 

那麼你可以得到你的水果或顏色或任何出字典。

相關問題