如何解析多层C#JSON.Net的JSON数据
我想从WeatherAPI读取数据 它有好几层的数据。当使用Json.Net时。我可以解析WebClient.DownloadData方法返回的字节数组。但是,即使在解析这个字节数组之后,我的结果仍然是3个键值对,第三个键值对是由多个键值对组成的结果 关于如何解决这个问题的任何想法 我的代码如下:如何解析多层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
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);
}