Gson fromJson не может десериализовать строку Json, отправленную из другого приложения - PullRequest
0 голосов
/ 13 мая 2019

У меня есть 2 приложения для Android - Приложение A и Приложение B. Приложение A отправляет строку JSON через сокет для приложения B. У меня проблемы с десериализацией строки JSON в приложении B, но я могу десериализовать его в приложении A. Приложение A вылетает при попытке запустить msgstr "gson.fromJson (json, mrlType)". (См. Фрагменты кода ниже)

Ошибка, которую я получил за десериализацию в приложении B, ожидается BEGIN_ARRAY, но была STRING в строке 1, путь 2 столбца $.

Вещи, которые я пробовал:

  • Я пытался использовать DataOutputStream / DataInputStream и OutputStream / InputStream, потому что я подозреваю, что это могло повредить Строка JSON, которую Приложение A отправило в Приложение B.

  • Я использую GSON.toJson для создания строки JSON и GSON.fromJson для десериализации строки.

  • Я попытался десериализовать ту же строку, которую приложение A отправило в приложение B, в самом приложении A. Отлично работает.

  • Я также закодировал байтовый массив, в который была преобразована строка JSON, с UTF-8 до того, как он был отправлен приложением A в приложение B. Я преобразовал его в Строка с этим: String (buffer, Charsets.UTF-8), когда получено приложение B это.

// App A

var reminderList = getAllReminderInfoList()

val gson = Gson()
val jsonStr = gson.toJson(reminderList)

dataOutputStream.writeInt(bytes.size)
dataOutputStream.write(jsonStr.toByteArray(Charsets.UTF_8))
dataOutputStream.flush()

// App B

val len = dataInputStream.readInt()
buffer = ByteArray(len)
dataInputStream.readFully(buffer)
jsonStr = String(buffer, Charsets.UTF_8)

val gson = Gson()
val mrlType = object : TypeToken<ArrayList<MedicationReminderLine>>() {}.type
var list : ArrayList<MedicationReminderLine> = gson.fromJson(json, mrlType)

Я действительно хочу, чтобы приложение B десериализовало строку json без проблем. Видимо, это не имеет ничего общего с логикой программирования (поправьте меня, если я ошибаюсь). Я думаю, что это должна быть какая-то ошибка или характеристика Gson, с которой я не знаком. Я действительно надеюсь, что кто-то может указать мне правильное направление! Спасибо.

...