解析谷歌计算器与Json在Windows Phone 7 / c#

本文关键字:Phone Windows Json 谷歌 计算器 | 更新日期: 2023-09-27 18:13:33

我目前正在为WP7制作一个应用程序,我正在实现一个货币兑换解决方案。我也可以用CSV来做,但是每次我找到一个看起来不错的代码片段(并修改它,等等),我只是满足了c# Silverlight库的限制。

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

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

现在,如果我想要一个textBlock显示"10美元= 54.20丹麦克朗",我该如何解析和过滤它?我基本上只需要应用程序去网站上点击一个按钮,获取信息,并返回如上格式的结果!

解析谷歌计算器与Json在Windows Phone 7 / c#

这其实很简单。我将演示如何调用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)的实例使用,因此您可以直接使用该对象,使用其属性执行数据绑定,等等。

我建议你使用WindowsPhone版本的JSON.NET。文档应该足以帮助您弄清楚如何从那里获得所需的信息。