读取已通过gson库序列化的嵌套json对象

时间:2015-06-17 20:02:11

标签: java json serialization gson deserialization

我将对象存储在共享首选项中。为此,我在存储它们之前使用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;
    }

1 个答案:

答案 0 :(得分:1)

是否有理由使用TypeAdapter而不是直接将JSON映射到对象中?例如:

Gson gson = new Gson();
Info info = gson.fromJson(jsonString, Info.class)

如果您需要使用JsonReader,则可以考虑通过调用JsonToken来使用reader.peek()。然后,您就可以switch通过令牌类型BEGIN_OBJECTEND_OBJECTBEGIN_ARRAYSTRING ...)。