Используйте JSON в WP7 вместо SOAP - PullRequest
2 голосов
/ 05 сентября 2011

У меня есть приложение для Windows Phone 7 (написанное на C # с использованием инструментов Visual Studio 2010 + для разработчиков Windows Phone), которое использует данные из веб-службы.

В прошлом я использовал SOAP, что было довольнопрямолинейно (добавлено в качестве справочника услуг, и я был в основном готов к работе), но теперь я хотел бы использовать вместо него JSON.

API предлагает как SOAP, так и конечную точку JSON RESTful, и обе конечные точки предоставляют одинаковые данные.

Теперь мои вопросы:

1) Моя основная мотивация для перехода с SOAP на JSON заключается в том, что JSON должен быть быстрее (ответ меньше).Это правильно?

2) Как я могу использовать конечную точку JSON в моем проекте?Я попытался добавить его в качестве справочника услуг, но либо что-то пропустил, либо это невозможно.

Я абсолютный новичок в отношении JSON, поэтому любая помощь будет приветствоваться.

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Осторожно - Thar be Единороги!

Всякий раз, когда вы довольны оптимизацией и начинаете исследовать решения, полезно сделать глубокий вдох, перечислите пару вещей, которые точно описывают то, что вы хотите, как с точки зрения потребителя, так и с точки зрения сервера. Будьте готовы пойти на уступки, где это уместно, но не позволяйте себе слишком далеко отклоняться от ваших требований .

Ну что у тебя работает?

Хорошо - я рад, что вы спросили!

Я использую стек ServiceStack ... в производстве большую часть года. На самом деле это поставщик по умолчанию для моих приложений для iOS, потому что он чертовски универсален. По сути, вы получаете REST + SOAP в одной реализации и некоторые очень приятные оптимизации.

https://github.com/mythz/ServiceStack.Text

Плюс API делает JSON действительно очень простым.

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);

Хочешь участвовать в гонке?

[Вставьте бесплатную 2 Быстрая 2 Яростная шутка здесь ...]

Ну да, действительно. Я большой поклонник Демиса Белло [mythz] и его работ, на самом деле , он сейчас работает в StackOverflow. Достаточно сказать, что он безумно хорош и оптимистичен, поэтому, если что-то идет медленно, вы почти наверняка уверены, что проблема не в его коде: -P

Вот несколько тестов, чтобы намочить клюв:

http://www.servicestack.net/mythz_blog/?p=344

http://daniel.wertheim.se/2011/02/07/json-net-vs-servicestack/

0 голосов
/ 06 сентября 2011

JSON может быть быстрее, в зависимости от сервера, конечно. обычно JSON приводит к меньшему отклику, поскольку в нем нет этих тегов xml.

для использования (незащищенного) фида JSON вы можете использовать класс WebClient:

public void GetData()
{
    var client = new WebClient();
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_GetDataCompleted);
    client.OpenReadAsync(new Uri(_address));
}

void client_GetDataCompleted(object sender, OpenReadCompletedEventArgs e)
{
  var serializer = new DataContractJsonSerializer(typeof(JSONDataObject),null);
  var data = serializer.ReadObject(e.Result) as JSONDataObject;

  //do what you need with the data
}

[DataContract(Name = "JSONDataObject")]
public class JSONDataObject
{
    [DataMember(Name = "id", Order = 0)]
    public int Id 
    {
        get;set; 
    }

    [DataMember(Name = "name", Order = 1, EmitDefaultValue = false)]
    public string Name 
    {
        get;set; 
    }
}

Я немного упростил код, но я использую только основные функции, поэтому с некоторыми исследованиями у вас все будет в порядке. Ключевыми классами являются WebClient, DataContractJsonSerializer, DataContract, DataMember, которые хорошо документированы в MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...