解析谷歌计算器与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丹麦克朗",我该如何解析和过滤它?我基本上只需要应用程序去网站上点击一个按钮,获取信息,并返回如上格式的结果!
这其实很简单。我将演示如何调用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。文档应该足以帮助您弄清楚如何从那里获得所需的信息。