无法访问JSON的内部节点

时间:2019-02-16 16:51:24

标签: c# json.net

我正在尝试获取JSON的内部节点。

尤其是,我试图获取“ A”和“ B”中的值。

但是,我的JSON以“ Things”开头,然后转到“ A”和“ B”。

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Rextester
{
public class Program
{
    public static void Main(string[] args)
    { 
        string json = "{\"Things\":[{\"A\":\"one\",\"B\":\"two\",\"C\":\"three\",\"D\":\"four\",\"E\":\"five\", \"F\":\"six\"},\"G\":\"seven\"}]}";

        var jsonObj = JsonConvert.DeserializeObject<JObject>(json).First.First;
        Console.WriteLine(jsonObj["Things"]);
    }

    public class Account
    {
        public string A
        {
            get;
            set;
        }

        public string B
        {
            get;
            set;
        }
    }
  }
}

2 个答案:

答案 0 :(得分:1)

假设有效的JSON,您的JSON无效:

{
  "Things": [{
      "A": "one",
      "B": "two",
      "C": "three",
      "D": "four",
      "E": "five",
      "F": "six" },
  {"G": "seven"}]
}

您需要使用键,值对为JSON定义类,如下所示:

public class Myclass
{
    public Dictionary<string, string>[] Things { get; set; }    
}

那你就好了:

string json = "{\"Things\":[{\"A\":\"one\",\"B\":\"two\",\"C\":\"three\",\"D\":\"four\",\"E\":\"five\", \"F\":\"six\"},{\"G\":\"seven\"}]}";

var jsonObj = JsonConvert.DeserializeObject<Myclass>(json);
Console.WriteLine(jsonObj.Things[0]["A"]);
Console.WriteLine(jsonObj.Things[0]["B"]);

输出:

one
two

答案 1 :(得分:0)

为帮助生成JSON类,您可以使用此网站http://json2csharp.com/ 当您使用大型JSON时,此功能非常有用。它还将验证您的json。