使用json字符串反序列化很困难

时间:2012-10-01 14:05:19

标签: c# json silverlight windows-phone-7

我在Silverlight为Windows手机发出网络请求。这就是回应。

{"result": {
"account": null,
"checkInfo": null,
"command": null,
"shifts": [
    {
        "description": "17:45 - 17:55 work shift",
        "id": 5459,
        "venueId": 132
    }]}}

我使用Newtonsoft.Json.dll,我的目的是捕捉数组 - 移位。

JObject obj = JObject.Parse(StringShifts);
JArray sh = (JArray)obj["shifts"];

但每次sh值为null。我做错了什么?提前谢谢。

3 个答案:

答案 0 :(得分:1)

var obj = (JObject)JsonConvert.DeserializeObject(json);
foreach (var shift in obj["result"]["shifts"])
{
    Console.WriteLine((string)shift["description"]);
}

答案 1 :(得分:1)

另一种方法是:(如果您在项目中执行此类操作,这非常有用)
在项目中创建这些类

public class Shift
    {
        public string description { get; set; }
        public int id { get; set; }
        public int venueId { get; set; }
    }

    public class Result
    {
        public object account { get; set; }
        public object checkInfo { get; set; }
        public object command { get; set; }
        public List<Shift> shifts { get; set; }
    }

    public class RootObject
    {
        public Result result { get; set; }
    }

然后在你的代码中

 var rootObject = JsonConvert.DeserializeObject<RootObject>(StringShifts);
 foreach(var shift in rootObject.result.shifts)
 {
     Console.Write(shift.description);
 }

通过这种方式,您可以更好地控制json响应数据。但是L.B的答案是否是你应用中的一次性过程。

答案 2 :(得分:0)

您缺少根results节点;这就是你应该如何使用它:

JArray sh = (JArray)obj["result"]["shifts"];

此外,请注意上面的JSON示例末尾缺少}