我将对象存储在共享首选项中。为此,我在存储它们之前使用gson库和typeadapter序列化对象。
这是我的对象在json中的样子:
{
"id": 0,
"name": "Sensor 2D:D3:5C",
"address": "00:07:80:2D:D3:5C",
"device": {
"mAddress": "00:07:80:2D:D3:5C"
},
"temp": "31342e37"
}
这一切都有效,但在反序列化"设备"因为它是一个BluetoothDevice对象而不是简单的字符串或int值。如何告诉我的TypeAdapter正确反序列化?
以下是我的typeadapter的read方法:
@Override
public myDevice read(final JsonReader in) throws IOException {
final myDevice dv= new myDevice();
in.beginObject();
while (in.hasNext()) {
switch (in.nextName()) {
case "id":
dv.setId(in.nextInt());
break;
case "name":
dv.setName(in.nextString());
break;
case "address":
dv.setAddress(in.nextString());
break;
case "temp":
dv.setTemp(in.nextString());
break;
case "device":
//What do I do here??
//dv.setDevice(in.????);
break;
}
}
in.endObject();
return vd;
}
答案 0 :(得分:1)
是否有理由使用TypeAdapter
而不是直接将JSON映射到对象中?例如:
Gson gson = new Gson();
Info info = gson.fromJson(jsonString, Info.class)
如果您需要使用JsonReader
,则可以考虑通过调用JsonToken
来使用reader.peek()
。然后,您就可以switch
通过令牌类型BEGIN_OBJECT
,END_OBJECT
,BEGIN_ARRAY
,STRING
...)。