This is actually pretty easy. I will illustrate making the call to the REST service and parsing the JSON data into a class. Then I think you'll be able to do the string concatenation and display on your own.
Start by adding a reference to the System.ServiceModel.Web assembly, which will give you access to the DataContractJsonSerializer in the System.Runtime.Serialization.Json namespace.
Next, create a class to represent the JSON. Use auto-implemented properties whose names match the JSON returned by the service:
public class ExchangeRate
{
public string lhs { get; set; }
public string rhs { get; set; }
public string error { get; set; }
public string icc { get; set; }
}
I'll assume you want to get the data when a button is clicked, so here's a small app with a button click handler.
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 );
}
}
}
I've written the async callback method in-line as a lambda statement, but you could just as easily write that as a separate method. After the call to have the serializer read the object, the JSON data is now available as an instance of your JSON serialization class (ExchangeRate) so you can work with that object directly, perform data-binding with its properties, and so on.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…