ASP Web Api + Android Retrofit. Ошибка при получении JSON

293
19 февраля 2017, 09:06

Имеется:

  • Приложение Android
  • Web API на ASP.NET

Создаю объект Retrofit:

Retrofit service = new Retrofit.Builder()
    .baseUrl("http://192.168.0.3/") // адрес WebApi
    .addConverterFactory(GsonConverterFactory.create())
    .build();

В коде вызываю нужный мне метод API, в API данные приходят корректно. В качестве теста возвращаю пришедшую в контроллер модель в json

Action

[HttpPost]
public JsonResult GetUser(UserModel model)
{
    return Json(JsonConvert.SerializeObject(model));
}

Model

public class UserModel
{
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("email")]
    public string Email { get; set; }
    [JsonProperty("password")]
    public string Password { get; set; }
    [JsonProperty("name")]
    public string name { get; set; }
    [JsonProperty("device_id")]
    public string DeviceId { get; set; }
    [JsonProperty("register_date")]
    public string RegisterDate { get; set; }
    [JsonProperty("updated_date")]
    public string UpdatedDate { get; set; }
}

Через POSTMAN получаю корректный json.
Однако в Android получаю Exception:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
     at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
     at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
     at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
     at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)
    ... 10 more

Почему на Android не парсится json пришедший с API?

UPD
Ответ от API:

{\"id\":1,\"email\":\"myemail@gmail.com\",\"password\":\"1234\",\"name\":null,\"device_id\":null,\"register_date\":null,\"updated_date\":null}

В Android в обработчике callback вываливаюсь сюда:

@Override
public void onFailure(Call<UserModel> call, Throwable t) {
    t.printStackTrace();
}
Answer 1

Согласно этому валидатору в ответе сервера невалидный JSON - лишние экранирующие слэши. Вот здесь описывают аналогичную проблему и советуют убрать экранирующие слэши

READ ALSO
смена iframe по клику

смена iframe по клику

есть 7 кнопок и 1 iframe, кликая по каждой должен меняться src в iframe

305
Галерея для сайта

Галерея для сайта

Как сделать так чтобы изображения разного размера в галереи отображались с одинаковой высотой и ширинойТо есть чтобы они автоматически...

254
как убрать по бокам белые полосы css [требует правки]

как убрать по бокам белые полосы css [требует правки]

Добрый день! как можно убрать белые полосы с картинок тут ссылка на страничку галереи

509