weixin_43741007 2022-06-30 19:13 采纳率: 33.3%
浏览 166
已结题

gson已经注册了registerTypeAdapter,但是不生效

问题遇到的现象和发生背景

gson已经注册了registerTypeAdapter(Object.class, new TypeAdapter(),但是debug的时候没有还是走的依赖包里自带的read方式

Gson gson = new GsonBuilder().serializeNulls().registerTypeAdapter(new TypeToken<Map<String, Object>>() {}.getType(), new TypeAdapter<Object>() {
            private final TypeAdapter<Object> delegate = new Gson().getAdapter(Object.class);
            @Override
            public void write(JsonWriter out, Object value) throws IOException {
                delegate.write(out, value);
            }

            @Override
            public Object read(JsonReader in) throws IOException {
                JsonToken token = in.peek();
                switch (token) {
                    case BEGIN_ARRAY:
                        List<Object> list = new ArrayList<Object>();
                        in.beginArray();
                        while (in.hasNext()) {
                            list.add(read(in));
                        }
                        in.endArray();
                        return list;

                    case BEGIN_OBJECT:
                        Map<String, Object> map = new LinkedTreeMap<String, Object>();
                        in.beginObject();
                        while (in.hasNext()) {
                            map.put(in.nextName(), read(in));
                        }
                        in.endObject();
                        return map;

                    case STRING:
                        return in.nextString();

                    case NUMBER:
                        //return in.nextDouble();
                        String n = in.nextString();
                        if (n.indexOf('.') != -1) {
                            return in.nextDouble();
                        }
                        return in.nextLong();

                    case BOOLEAN:
                        return in.nextBoolean();

                    case NULL:
                        in.nextNull();
                        return null;

                    default:
                        throw new IllegalStateException();
                }
            }
        }).create();

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月8日
    • 修改了问题 6月30日
    • 创建了问题 6月30日

    悬赏问题

    • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
    • ¥15 matlab代码 关于微分方程和嵌套的分段函数。
    • ¥15 把VMware项目复制到另一台电脑
    • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
    • ¥15 求caverdock使用教程
    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密