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

Read nested json objects that have been serialized via gson library

我正在共享首选项中存储一个对象。为此,我在存储对象之前使用 gson 库和类型适配器对对象进行了序列化。

这是我的对象在 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"
    }

这一切都有效,但在反序列化 "device" 时无效,因为它是一个 BluetoothDevice 对象,而不是简单的字符串或 int 值。我怎样才能告诉我的 TypeAdapter 正确反序列化它?

看一下我的类型适配器的读取方法:

    @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;
    }

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

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

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