【问题标题】:How could I get the values inside the json object and the name of the object itself in c#如何在 c# 中获取 json 对象内部的值和对象本身的名称
【发布时间】:2017-08-17 03:28:52
【问题描述】:

我想使用 c# 从 JSON 中获取“fruits”、“animals”、“numbers”,还想获取我正在使用的“fruits”、“animals”和“numbers”中的值json.net,但我不知道如何获得我想要的数据。

{
   "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; }

我想要的只是简单地获取对象名称及其值,而无需定义新属性。

我知道这已经回答了,如果有的话,请评论一些链接。

【问题讨论】:

  • without having to create a new constructor 构造函数是什么意思?
  • 为什么不反序列化为Dictionary&lt;string, List&lt;string&gt;&gt;
  • @CodeNotFound 我的意思是不创建另一个公共列表 colors{ get;放; }
  • @zerkms 我该怎么做?谢谢
  • @ExtendedAscii 你现在明白了 - 请先花一些时间自己尝试解决它。​​

标签: c# arrays json json.net


【解决方案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);

然后你就可以从字典里得到你的水果或颜色或任何东西了。

【讨论】:

    【解决方案2】:

    你是对的,你不能在解析给定的JSON 时使用类,因为你的JSON 数据不是固定的并且与特定项目无关,这就是为什么它是你可以使用@的地方字典中的 987654325@ 对象。 以下示例演示了如何使其工作。我又添加了 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;
            }
    

    这里是上面代码的执行。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多