Статьи

Использование службы JSON с Windows Phone

В этой статье я расскажу о потреблении сервиса JSON в Windows Phone.

Давайте напишем код:

Шаг 1. Создайте приложение службы WCF.

Шаг 2: Создать ServiceContract в IService1.

// ПРИМЕЧАНИЕ. Вы можете использовать команду «Переименовать» в меню «Refactor», чтобы изменить имя интерфейса «IService1» в коде и файле конфигурации вместе.

[ServiceContract]
public interface IService1
{
   [OperationContract]
   [WebGet(UriTemplate = "GetCustomerDetails", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
   Customer[] GetCustomerDetails();
}

Шаг 3: Создание DataContract в IService1.

[DataContract]
public class Customer
{
   [DataMember]
   public int CustomerId { get; set; }
   [DataMember]
   public string CustomerName { get; set; }
}

Step 4: Add GetCustomerDetails method in Service1.svc.cs.

public Customer[] GetCustomerDetails()
{
   return new Customer[] 
   {
      new Customer() {CustomerId=100,CustomerName="Cust 1",},
      new Customer() {CustomerId=102,CustomerName="Cust 2"},
      new Customer() {CustomerId=103,CustomerName="Cust 3"},
      new Customer() {CustomerId=104,CustomerName="Cust 4"},
      new Customer() {CustomerId=105,CustomerName="Cust 5"},
      new Customer() {CustomerId=106,CustomerName="Cust 6"},
      new Customer() {CustomerId=107,CustomerName="Cust 7"},
      new Customer() {CustomerId=108,CustomerName="Cust 8"}
   };
}

Шаг 5: Откройте Web.Config и поместите под тегом serviceModel.

<system.serviceModel>
   <services>
      <service name="JSON_Service.Service1">
         <endpoint name="jsonEP" address="" binding="webHttpBinding" behaviorConfiguration="json" contract="JSON_Service.IService1"/>
      </service>
   </services>
   <behaviors>
      <endpointBehaviors>
         <behavior name="json">
            <webHttp/>
         </behavior>
      </endpointBehaviors>
   </behaviors>
   <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Сервис готов, теперь мы создадим приложение Windows Phone для использования данных сервиса JSON.

Шаг 6: Создайте проект Silverlight для Windows Phone.

Шаг 7: Поместите Grid RowDefinition, Button, TextBlock и ListBox в ContentPanel в MainPage.XAML.

<Grid.RowDefinitions>
   <RowDefinition></RowDefinition>
   <RowDefinition></RowDefinition>
   <RowDefinition></RowDefinition>
   <RowDefinition></RowDefinition>
</Grid.RowDefinitions>

<Button x:Name="btnGetData" Grid.Row="0" Height="75" Content="Get JSON Data" Click="btnGetData_Click" />
<TextBlock Text="Customer ID Customer Name" Height="50" Grid.Row="1" FontSize="22" FontWeight="Bold" TextAlignment="Left" Foreground="#FFFFB090"></TextBlock>
<ListBox Name="lstCustomer" Grid.Row="2" FontSize="24">
</ListBox>

Шаг 8: Создайте клиента Class.

 

public class Customer
{
   public int CustomerId { get; set; }
   public string CustomerName { get; set; }
}

Step 9: Place btnGetData_Click method in MainPage.Xaml.cs which will invoked on click of Get JSON Data Button.

void btnGetData_Click(object sender, RoutedEventArgs e)
{
   try
   {
      WebClient webClient = new WebClient();
      Uri uri = new Uri("http://localhost:4611/Service1.svc/GetCustomerDetails");
      webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
      webClient.OpenReadAsync(uri);
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
   }
}

 

Шаг 10: Добавьте ссылку на System.Servicemode.Web и System.Xml.Linq.

Шаг 11: Добавьте ниже, используя директиву в MainPage.Xaml.cs.

using System.Runtime.Serialization.Json;
using System.Collections.ObjectModel;

Шаг 12: метод webClient_OpenReadCompleted будет вызван после завершения операции чтения службы. Поместите ниже метод в MainPage.Xaml.cs.

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
   DataContractJsonSerializer ser = null;
   try
   {
      ser = new DataContractJsonSerializer(typeof(ObservableCollection<Customer>));
      ObservableCollection<Customer> customers = ser.ReadObject(e.Result) as ObservableCollection<Customer>;
      foreach (Customer em in customers)
      {
         int customerId = em.CustomerId;
         string customerName = em.CustomerName;
         lstCustomer.Items.Add(customerId + " " + customerName);
      }
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
   }
}

Шаг 13: Теперь запустите приложение Windows Phone и нажмите «Получить данные JSON». Если служба не запущена, необходимо разместить службу servie.

На этом статья о потреблении JSON в Windows Phone заканчивается.