2017-08-17 49 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); 

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

相关问题