2011-11-03 47 views
-1

我目前正在为WP7执行一个货币兑换解决方案。我也可以用CSV编写它,但是每次我找到一个看起来没问题的代码片段(并修改它等)时,我只是遇到了来自C#Silverlight库的限制。在Windows Phone 7/C#中用Json解析Google Calculator?

所以基本上,我现在试图从谷歌计算器JSON结果中筛选出必要的信息。

基本上,这是链接:Google Calculator 这是JSON的结果:{lhs: "10 U.S. dollars",rhs: "54.2090627 Danish kroner",error: "",icc: true}

现在,如果我想一个TextBlock显示“10美元= 54.20丹麦克朗”,我想怎么也得解析和过滤这个?我基本上只需要点击一个按钮就可以进入网站,获取信息并返回如上所示的结果!

+1

你在这里问几个问题。你应该把你的问题集中在一个问题上,大概是你的题目问题。 – DMan

+0

你在哪里遇到麻烦 - 是解析JSON还是从字符串值中提取数字?如果前者,C#中有几个JSON库,您可以尝试。 –

+0

谢谢,我会试试图书馆。到目前为止,我一直在尝试几种方法,但是既没有解析它,也没有提取任何东西,正如我想的那样。将尝试更多:) – AndreasB

回答

1

这其实很简单。我将说明如何调用REST服务并将JSON数据解析为一个类。然后我认为你可以自己完成字符串连接和显示。

首先添加对System.ServiceModel.Web程序集的引用,它将使您可以访问System.Runtime.Serialization.Json命名空间中的DataContractJsonSerializer

接下来,创建一个类来表示JSON。使用自动实现的属性,其名称与JSON服务返回:我假设你想要一个按钮被点击时,为了获得数据

public class ExchangeRate 
{ 
    public string lhs { get; set; } 
    public string rhs { get; set; } 
    public string error { get; set; } 
    public string icc { get; set; } 
} 

,所以这里是一个小的应用程序有一个按钮单击处理程序。

using System; 
using System.Net; 
using System.Runtime.Serialization.Json; 
using System.Windows; 
using Microsoft.Phone.Controls; 

namespace WP7JsonClient 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     var client = new WebClient(); 

     // Callback function written in-line as a lambda statement 
     client.OpenReadCompleted += 
     (s, eargs) => 
     { 
      var serializer = new DataContractJsonSerializer(typeof(ExchangeRate)); 
      var exchangeRate = (ExchangeRate)serializer.ReadObject(eargs.Result); 

      // display exchange rate data here... 
     }; 

     var uri = new Uri("http://www.google.com/ig/calculator?hl=en&q=10USD=?DKK"); 
     client.OpenReadAsync(uri); 
    } 
    } 
} 

我已经写了异步回调方法在线作为一个lambda语句,但你可以很容易地写,作为一个单独的方法。在调用序列化程序读取对象之后,JSON数据现在可作为JSON序列化类(ExchangeRate)的实例使用,因此您可以直接使用该对象,使用其属性执行数据绑定等等。

+0

哦,谢谢!我会试着让这个工作。不应该花费太多的工作才能打印汇率数据:)但是,是否有限制小数位数的方法,以“XX.XX”或类似方式? :) – AndreasB

+0

+1优秀的答案。 – StriplingWarrior

+0

完美地工作。谢谢一堆。经过一个星期的尝试XML/CSV +++,我终于让json工作了!再次感谢 :)! - – AndreasB

0

我建议你使用WindowsPhone内部版本JSON.NETThe documentation应该足以帮助您了解如何从那里获取所需的信息。

+0

我现在将尝试JSON.NET库。这似乎是我需要这个!谢谢。如果有什么东西在这里很不清楚,我会报告回来:) – AndreasB

+0

JSON.NET库很好,我用它在很多项目上。不要把任何东西从图书馆拿走......只是你不需要*在这个简单的场景中使用它。我展示了如何使用.NET Framework的DataContractJsonSerializer在单独的答案中将JSON反序列化为.NET类。 –