来自Json的Gson无法反序列化从另一个应用程序发送的Json字符串

时间:2019-05-13 10:02:23

标签: json gson inputstream outputstream

  

我有2个android应用-App A和AppB。App A通过发送JSON字符串   App B的套接字。我在App上反序列化JSON字符串时遇到问题   B,但是我可以在App A中反序列化。尝试运行时App A崩溃   “ gson.fromJson(json,mrlType)”。 (请参见下面的代码段)

我在App B中反序列化时收到的错误应为BEGIN_ARRAY,但在第1行第2列路径$处为STRING。

我尝试过的事情是:

  
      
  • 我尝试使用DataOutputStream / DataInputStream和OutputStream / InputStream,因为我怀疑它可能损坏了   App A发送到App B的JSON字符串。

  •   
  • 我使用GSON.toJson创建JSON字符串,并使用GSON.fromJson反序列化字符串。

  •   
  • 我尝试在App A本身上反序列化App A发送给App B的相同字符串。它像一种魅力。

  •   
  • 我还用UTF-8编码了将JSON字符串转换为的字节数组,然后由App A发送到AppB。我将其转换为   带有以下内容的字符串:收到应用B时的String(buffer,Charsets.UTF-8)   它。

  •   
// 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)

我真的希望App B反序列化json字符串没有问题。显然,它与编程逻辑无关(如果我错了,请纠正我)。我认为这一定是我不熟悉的Gson的错误或特征。我真的希望有人能指出我正确的方向!谢谢。

0 个答案:

没有答案