从Windows Phone 8中的URL获取JSON字符串

所以我试图在Windows Phone 8应用程序中从Url获​​取Json字符串。 我只需要调用一个返回此字符串的callbackurl,这就是它,但不知怎的,我已经被困在这几天了,我只是不明白该怎么做

我有一个urlparser类,包含2个方法:

public void ParseJsonUrl(string url) { Uri uri = new Uri(url); WebClient webClient = new WebClient(); webClient.DownloadStringCompleted += webClient_DownloadStringCompleted; webClient.DownloadStringAsync(uri); } void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { var jsonData = JsonConvert.DeserializeObject(e.Result); Debug.WriteLine(jsonData.parameter1); } 

现在我只是想显示我的Json字符串中包含的一个参数,当然我的方法会在我开始工作后执行其他操作

我在urlparser.cs文件的开头有一个名为“parameters”的类,看起来像

 public class parameter { public string parameter1 { get; set; } public string parameter2 { get; set; } public string parameter3 { get; set; } } 

但这不起作用……我得到了这个错误

‘System.Reflection.TargetInvocationException’

我按照本教程http://blogs.msdn.com/b/pakistan/archive/2013/06/23/10425845.aspx查看了大量其他几乎完全相同的东西,但不幸的是,这不是工作。 在一些教程中,他们使用“DownloadString”而不是“DownloadStringAsync”但我无法调用此方法(可能不适用于WP8),而在其他一些教程中,他们在方法中使用“await”但我无法理解我在哪里应该放置“await”语句以及我应该添加的其他代码段

此外,一旦我能够在我的var中获取我的json数据,如果有人可以告诉我如何从另一个类访问它,那就太棒了!

谢谢 !

确保从WebClient接收的json文件的结构与您解析的类结构类似,即

{
“参数”:{
“parameter1”:“somestring1”,
“parameter2”:“somestring2”,
“parameter3”:“somestring3”
}
}

否则,您需要创建一个类似于您正在接收的json格式的类结构。

或者,您可以从json创建一个JObject并按键访问值(请参阅此处: http ://james.newtonking.com/json/help/?topic = html / LINQtoJSON.htm)

首先,你需要看看你的参数类是什么样的,你可以通过这里的“json to class”应用程序,你插入链接和应用程序生成参数类应该如何,请注意有时你必须手动解析json,还请检查你的互联网连接。

所以,在弄清楚问题是什么之后,我想如果有人有一天会遇到同样的问题,我会回答这个问题。 问题是,我在行后的“ParseJsonUrl”函数中有一些代码

 webClient.DownloadStringAsync(uri); 

这就是问题所在。 此外,ParseJsonUrl由一个按钮调用的函数调用,在该调用之后,该函数也执行其他调用,也执行该按钮。

并且所有thoose调用都会导致字符串永远不会被下载,直到执行了按钮调用的所有内容,之前我需要字符串。

解决方案是在调用我的UrlParser.ParseJsonUrl函数的类中创建DownloadStringCompleted方法,并将该事件传递给其参数中的函数。

然后,按钮单击需要执行的所有操作都在该DownloadStringCompleted方法中设置

它在代码中的样子:

 private void Button_Click(object sender, RoutedEventArgs e) { MyClass myClass = new MyClass(); myClass.Function(url); // Assuming url is already set somewhere } 

然后在MyClass中

 public string Function(string url) { this.url = url; URLParser parser = new URLParser(); parser.ParseJsonUrl(url, new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted )); } void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { //Everything you need to be performed once the string is downloaded } 

最后在UrlParser类中

 public void ParseJsonUrl(string url, DownloadStringCompletedEventHandler handler) { Uri uri = new Uri(url); WebClient webClient = new WebClient(); webClient.DownloadStringCompleted += handler; webClient.DownloadStringAsync(uri); } 

希望有一天这会帮助某人!