如何解析多层C#JSON.Net的JSON数据

如何解析多层C#JSON.Net的JSON数据,c#,json,json.net,C#,Json,Json.net,我想从WeatherAPI读取数据 它有好几层的数据。当使用Json.Net时。我可以解析WebClient.DownloadData方法返回的字节数组。但是,即使在解析这个字节数组之后,我的结果仍然是3个键值对,第三个键值对是由多个键值对组成的结果 关于如何解决这个问题的任何想法 我的代码如下: WebClient wc = new WebClient(); var stream = wc.DownloadData("http://api.aerisapi.com/o

我想从WeatherAPI读取数据

它有好几层的数据。当使用Json.Net时。我可以解析WebClient.DownloadData方法返回的字节数组。但是,即使在解析这个字节数组之后,我的结果仍然是3个键值对,第三个键值对是由多个键值对组成的结果

关于如何解决这个问题的任何想法

我的代码如下:

WebClient wc = new WebClient();

            var stream = wc.DownloadData("http://api.aerisapi.com/observations/milwaukee,wi?client_id=" + id +
                "&client_secret=" + secret + "");
            Dictionary<string, Object> jsonStr = parse(stream);
            Console.ReadLine();
        }
            public static Dictionary<String, Object> parse(byte[] stream)
        {
            string jsonStr = Encoding.UTF8.GetString(stream);
            return JsonConvert.DeserializeObject<Dictionary<String, Object>>(jsonStr);
        }

您应该创建相应的类(以及嵌套对象的其他类),然后创建它的实例并调用

JsonConvert.PopulateObject(jsonString, myObject);
根对象看起来像

public class AerisWeatherResponse
{
    public bool success;
    public AerisWeatherError error; // a class with code and description fields
    public AerisWeatherResponseBody response;
}
AerisWeatherResponseBody类应该如下所示:

public class AerisWeatherResponseBody
{
    public string id;
    public AerisWeatherLocation; // a class with long and lat fields
    public AerisWeatherPlace; // a class with name, state and country fields
    .......
    .......
}

如果不想重新创建对象模型,可以使用dynamic JObject:

static void Main(string[] args)
{
    using (var wc = new WebClient())
    {
        var stream = wc.DownloadData("http://api.aerisapi.com/observations/milwaukee,wi?client_id=xxx&client_secret=xxx");
        dynamic jsonObject = Parse(stream);
        Console.WriteLine(jsonObject.success);
        Console.WriteLine(jsonObject.error);
        Console.WriteLine(jsonObject.response);
        Console.WriteLine(jsonObject.response.place.name);
    }
    Console.ReadLine();
}
public static JObject Parse(byte[] stream)
{
    var jsonStr = Encoding.UTF8.GetString(stream);
    return JObject.Parse(jsonStr);
}

该JSON无效,请尝试将其上载到,您将在第一行收到错误:
第1行出现解析错误:应为“STRING”,“}”
。你能用有效的JSON更新你的问题吗?今晚晚些时候我会点击URL并获取一个纯JSON返回对象。我发布的json已经进行了反序列化,并通过for-each循环发送,以分割出密钥。如果到目前为止提供的答案足以让您接受一个,那么您就不必了。我认为他们将在今晚晚些时候进行测试。我最终想要将json键值拉入一个集合或对象,然后可以用来写入另一个库中的另一个对象。我不知道这一点!令人惊叹的!
static void Main(string[] args)
{
    using (var wc = new WebClient())
    {
        var stream = wc.DownloadData("http://api.aerisapi.com/observations/milwaukee,wi?client_id=xxx&client_secret=xxx");
        dynamic jsonObject = Parse(stream);
        Console.WriteLine(jsonObject.success);
        Console.WriteLine(jsonObject.error);
        Console.WriteLine(jsonObject.response);
        Console.WriteLine(jsonObject.response.place.name);
    }
    Console.ReadLine();
}
public static JObject Parse(byte[] stream)
{
    var jsonStr = Encoding.UTF8.GetString(stream);
    return JObject.Parse(jsonStr);
}