当我调用Restful Web API时,我收到了来自服务器的JSON字符串作为响应。因此,我使用以下代码将JSON字符串反序列化为.NET对象:
RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonString);
我的API调用的响应(JSON字符串)如下:
{"Observation":{"FeelsLike":{"Text":["23"]},"WindDirection":{"Value":"SE","Text":["SE"],"ImageKey":"windSE"},"WindSpeed":{"Text":["14km/h"]},"Pressure":{"Text":["102.4kPa"]},"Visibility":{"Text":["16.0km"]},"Ceiling":{"Text":["21900ft"]},"Humidity":{"Text":["70%"]},"Sunrise":{"Text":["06:38"]},"Sunset":{"Text":["19:57"]},"ExpirationTime":{"Value":8286},"RefreshTime":{"Value":1267},"Timestamp":{"GMT":"2014-08-29T15:45","Local":"2014-08-29T11:45","Text":["August 29 2014, 11:45 AM"]},"Icon":{"Value":"OVC","TextKey":"obs24","ImageKey":"wxicon8"},"Temperature":{"Text":["19","°C"]}}}
现在,我想访问(将23存储到变量中)"FeelsLike":{"Text":["23"]}中的值23,我该怎么做?
我尝试了以下方法,但没有成功:
步骤1)。我将JSON字符串转换为C#类(链接到类代码:http://goo.gl/OTKL4l)在http://json2csharp.com/,我尝试用这行代码访问值23:
Console.WriteLine(obj.Observation.FeelsLike.Text);
但我得到了以下输出:
System.Collections.Generic.List`1[System.String]
如果您查看JSON对象,FeelsLike的键实际上返回了一个列表。因此,通过扩展
FeelsLike.Text
实际上打印了一个列表。如果您想要列表中的第一个对象,请尝试
FeelsLike.Text.get(0); or FeelsLike.Text[0];
Text
是一个数组,因此它被反序列化为List<string>
(从您在问题末尾发布的字符串值中可以清楚地看出)。这样做:
Console.WriteLine(obj.Observation.FeelsLike.Text.FirstOrDefault() ?? "");
使用JSON.NET库JSON.NET,您可以执行以下操作:
dynamic obj = JObject.Parse(jsonString);
然后用obj.FeelsLike.Text;
访问"FeelsLike":{"Text":["23"]}