Использование клиента ServiceStack с не-ServiceStack REST Services - PullRequest
2 голосов
/ 07 января 2012

У меня возникли небольшие проблемы с использованием ServiceCtack DataContract API + * ServiceClient для получения соответствующей десериализации из стандартного сервиса XML / JSON REST. Например, если мы возьмем следующий вывод (используйте заголовок accept, чтобы получить json):

http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/198440/allinfo

  1. Как бы вы пошли на структурирование объекта модели для обработки как Вывод JSON и вывод XML hte из этого сервиса (использует accept заголовки, чтобы получить JSON)?

  2. Требуется ли указывать явный параметр «Имя» в Атрибуты DataContract и DataMember, чтобы получить соответствующие десериализации?

  3. Как ServiceStack сравнивает имена объектов XML / JSON с Имена свойств в модели? Они чувствительны к регистру?

  4. Можем ли мы получить какой-то универсальный API делегата Func в JsonRestClientAsync для беспроблемного интегрировать наши собственные механизмы десериализации, где у нас есть сторонний формат для решения с

Да, я знаю, что могу использовать ServiceStack.Text для явной десериализации. Я в значительной степени использую эту зависимость во всех моих проектах .NET: -)

Спасибо,

Anuj

1 Ответ

5 голосов
/ 08 января 2012

Если это сторонний веб-сервис (т.е. не веб-сервис ServiceStack), чем я буду пытаться анализировать только один из их форматов, я лично предпочитаю JSON для лучшей устойчивости, если они меняют свой API. IMO - это проигрышное предложение, пытаясь поддерживать разные форматы с одной и той же моделью, они могут легко сломать его в любое время.

Что касается JSON Serializer в ServiceStack, то в последнем выпуске - свойства не чувствительны к регистру, и вы можете установить JsConfig.EmitCamelCaseNames=true, чтобы он вместо этого выдавал имена верблюдов. См. Этот модульный тест .

Также теперь учитывается параметр [DataMember(Name="custom")], если вы хотите, чтобы имя свойства отличалось от сгенерированного имени.

...