Разобрать Google Calculator с Json в Windows Phone 7 / C #? - PullRequest
0 голосов
/ 04 ноября 2011

В настоящее время я делаю заявку на WP7, где внедряю решение по обмену валюты. Я мог бы сделать это и с CSV, но каждый раз, когда я нахожу фрагмент, который выглядит нормально (и изменяю его и т. Д.), Я просто встречаю ограничения из библиотек C # Silverlight.

В общем, сейчас я пытаюсь отфильтровать необходимую информацию из результата JSON в Google Calculator.

В основном это ссылка: Google Calculator И это результат JSON: {lhs: "10 U.S. dollars",rhs: "54.2090627 Danish kroner",error: "",icc: true}

Теперь, если бы я хотел, чтобы текстовый блок показывал "10 долларов США = 54,20 датских крон", как бы мне пришлось проанализировать и отфильтровать это? Мне просто нужно, чтобы приложение заходило на веб-сайт одним нажатием кнопки, получало информацию и возвращало форматированный результат, как указано выше!

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Это на самом деле довольно легко.Я проиллюстрирую выполнение вызова службы REST и анализ данных JSON в класс.Тогда я думаю, что вы сможете выполнить конкатенацию строк и отобразить их самостоятельно.

Начните с добавления ссылки на сборку System.ServiceModel.Web, которая предоставит вам доступ к DataContractJsonSerializer. в пространстве имен System.Runtime.Serialization.Json.

Затем создайте класс для представления 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 );
    }
  }
}

Я написал встроенный метод асинхронного обратного вызова как лямбда-оператор, но вы могли бы написать его так же легко, как отдельный метод.После вызова, чтобы сериализатор прочитал объект, данные JSON теперь доступны как экземпляр вашего класса сериализации JSON (ExchangeRate), так что вы можете работать с этим объектом напрямую, выполнять привязку данных с его свойствами и т. Д.

0 голосов
/ 04 ноября 2011

Я бы посоветовал вам использовать сборку WindowsPhone JSON.NET . Документации должно быть достаточно, чтобы помочь вам понять, как получить от вас необходимую информацию.

...