我花了很多小时试图解析JsonArray,我通过graph.facebook获得了它,这样我就可以获得额外的值。我想提取的值是消息和ID。
获得JasonArry不是问题,而且效果很好:
[
{
"code":200,
"headers":[{"name":"Access-Control-Allow-Origin","value":"*"}],
"body":"{
"id":"255572697884115_1",
"from":{
"name":"xyzk",
"id":"59788447049"},
"message":"This is the first message",
"created_time":"2011-11-04T21:32:50+0000"}"},
{
"code":200,
"headers":[{"name":"Access-Control-Allow-Origin","value":"*"}],
"body":"{
"id":"255572697884115_2",
"from":{
"name":"xyzk",
"id":"59788447049"},
"message":"This is the second message",
"created_time":"2012-01-03T21:05:59+0000"}"}
]
现在我已经尝试了几种方法来访问消息,但每个方法都以catch结束。。。并抛出异常。
例如:
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(json);
foreach (var item in result)
{
Console.WriteLine(item.body.message);
}
引发异常:System。集合。通用的字典不包含正文的定义。尽管如此,您可以在下面的屏幕截图中看到,该主体包含定义。
因为我不允许发布图片,你可以在directupload上找到:http://s7.directupload.net/images/120907/zh5xyy2k.png
我没有更多的想法,所以请你帮我。我需要这个项目,私人的,而不是商业的。
也许你可以给我一段代码,这样我就可以继续我的开发了。
到目前为止谢谢
多米尼克
如果您使用Json。Net,你所要做的就是
更换
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(json);
带有
dynamic result = JsonConvert.DeserializeObject(json);
仅此而已。
您没有反序列化为强类型对象,因此应用程序抛出异常是正常的。换句话说,反序列化程序不会为您创建Anynymous类。
您的字符串实际上被反序列化为2个对象,每个对象都包含Dictionary<string,object>
元素。所以你需要做的是:
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(s);
foreach(var item in result)
{
Console.WriteLine(item["body"]["message"]);
}
这是一个完整的示例代码:
void Main()
{
string json = @"[
{
""code"":200,
""headers"":[{""name"":""Access-Control-Allow-Origin"",""value"":""*""}],
""body"":{
""id"":""255572697884115_1"",
""from"":{
""name"":""xyzk"",
""id"":""59788447049""},
""message"":""This is the first message"",
""created_time"":""2011-11-04T21:32:50+0000""}},
{
""code"":200,
""headers"":[{""name"":""Access-Control-Allow-Origin"",""value"":""*""}],
""body"":{
""id"":""255572697884115_2"",
""from"":{
""name"":""xyzk"",
""id"":""59788447049""},
""message"":""This is the second message"",
""created_time"":""2012-01-03T21:05:59+0000""}}
]";
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(json);
foreach(var item in result)
{
Console.WriteLine(item["body"]["message"]);
}
}
打印:
This is the first message
This is the second message
我正在使用这个简单的技术
var responseTextFacebook =
@"{
"id":"100000891948867",
"name":"Nishant Sharma",
"first_name":"Nishant",
"last_name":"Sharma",
"link":"https://www.facebook.com/profile.php?id=100000891948867",
"gender":"male",
"email":"nihantanu2010u0040gmail.com",
"timezone":5.5,
"locale":"en_US",
"verified":true,
"updated_time":"2013-06-10T07:56:39+0000"
}"
我已经申报了类
public class RootObject
{
public string id { get; set; }
public string name { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string link { get; set; }
public string gender { get; set; }
public string email { get; set; }
public double timezone { get; set; }
public string locale { get; set; }
public bool verified { get; set; }
public string updated_time { get; set; }
}
现在我正在反序列化
JavaScriptSerializer objJavaScriptSerializer = new JavaScriptSerializer();
RootObject parsedData = objJavaScriptSerializer.Deserialize<RootObject>(responseTextFacebook );