2012-10-01 138 views
0

我在Silverlight中为windows phone发出了一个web请求。这是答复。json字符串反序列化困难

{"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"]; 

但每次shnull。我做错了什么?先谢谢你。

+2

这是确切的回应?我问你是否错过了最后的大括号。 –

回答

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的回答是,如果它是你的应用中的一次性过程。

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

非常感谢你的队友 –

0

您错过了根节点results节点;这是你应该如何使用它:

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

另外,请注意,在上面的JSON样本的最后一个失踪}

+0

NullReferenceException再次 –

+0

我犯了一个小错误,它是“结果”而不是“结果”;请现在试试! –

+0

我看到了,无论如何 –