Gson序列化匿名内部类失败

Android:那些年错过的Gson(二)--自定义序列化与反序列化 在上篇文章里已经讲解过Gson的基本操作,这应该算是一个简易的基础入门吧。接下来,我们要尝试着如何自定义的去实现我们需要的序列化与反序列化操作。在讲解技术之前,先谈谈我们为什么需要去实现自定义的序列化与反序列化。说起这个为什么,其实说白了就一句话“不是所有前端想要的数据,你的后端都愿意给”,当然,你有个非常靠谱又非常乐于助人的后端除外,或者说,你是一个还算有姿色女程序员。如果这两者你都不是,我觉得... 阅读详情

坑1:我们初始化Map之类的集合的时候会用如下优雅的方式:

Map<String, String> map = new HashMap<String, String>() {{
            put("cjy", "cjy");
        }};
Gson gson = new Gson();
        System.out.println(gson.toJson(map));

但是会发现序列化后为null;这是因为上述方式产生的map是匿名内部类的实例,也就是说new出来的map没有类名,这样的话Gson只知道该类的父类是HashMap而不知道该类。又由于Gson是通过类反射得到属性再序列化,因为不知道类名,所以转json失败。

解决办法,Map<String,String> map2=new HashMap<String,String>(map);后再转json


坑2:

Map<String, String> map = new HashMap<String, String>() {{
            put("cjy", "cjy");
        }};
        Set<Map.Entry<String, String>> set2 = map.entrySet();
        Gson gson = new Gson();
        System.out.println(gson.toJson(set2))

结果为{[]}, 如上也是无法转换json的,这是因为使用map.entrySet()方法得到的set集合是一个内部类,里面并没有真正的元素数组,而是使用外部类HashMap的元素数组,这时虽然该内部类有类名(HashMap.EntrySet),但是类里面没有元素数组,以Gson通过类来找属性的时候会发现没有属性而转换失败


为什么坑1是null呢:是因为Gson连类都没找到

为什么坑2是{[]}:找到了类,但是没有元素

Windows 10/11 零基础配置 SillyTavern 连接 Claude API 完整指南(含 Node.js 环境搭建) 本文提供Windows 10/11系统下零基础配置SillyTavern连接Claude API的完整教程,涵盖Node.js环境搭建、SillyTavern初始化及API连接配置等关键步骤。通过详细的操作指南和实用技巧,帮助用户快速搭建AI聊天界面并优化对话体验,实现与Claude AI的高效交互。 阅读详情

相关推荐

a股level2数据接口的最优委托信息

Level-1提供的数据并不可以知道委托了xxx手是有多少人下的,以及每个人下了多少的明细。通过Level-2的这个详细买卖盘数据,盘口上的单子到底是散户小打小闹,还是主力真刀实枪在干,都一览无余。交易类型:1-市价,2-限价,3-本方优先,10-撤单, 11-暂不清楚( 基金/ 债券有此值)除了提供逐笔成交记录这个信息外,还提供了最优委托信息,也就是盘口中前50笔订单的委托数量明细。那么Level-2盘口委托数据的速度更新是非常快的,大家可以通过。交易方向:0-未知,1-买入,2-卖出。

Qq_2037696191的博客 1168

内部类不能被序列化的原因

内部类不能被序列化是因为内部类的实例化需要外部类的实例作为前提条件,而外部类的实例化又可能需要访问非序列化的成员变量或方法。因此,如果内部类实例被序列化,它的外部类状态可能会丢失或破坏,导致反序列化失败或产生错误的结果。此外,内部类可能包含对外部类实例的隐式引用,这会增加序列化和反序列化的复杂性和风险。如果内部类实例被序列化,它的外部类实例可能无法正确地反序列化,因为它依赖于非序列化的外部类状态。静态类可以被序列化,因为它们不包含对外部类实例的引用,并且可以独立于外部类进行序列化和反序列化。

乔治大哥的博客 5900

数据讲述中国故事!和鲸助力中国综合社会调查(CGSS)数据分析与可视化大赛圆满收官

用数据研究中国问题、总结中国道路、讲述中国故事。和鲸作为协办单位全程支持本次大赛,为中国人民大学中国调查与数据中心实施全套赛事系统,同时提供完备而周全的赛事运营服务。

ModelWhale的博客 1410

fastjson反序列化异常解决方案(内部类反序列化失败问题) java.lang.IllegalArgumentException: argument type mismatch

fastjson内部类在反序列化内部类时失败 com.alibaba.fastjson.JSONException: create instance error java.lang.IllegalArgumentException: argument type mismatch

wskws的专栏 5849

Docker启动安装nacos(详情讲解,全网最细)

docker安装nacos保姆级教程

ilvjiale的博客 8万+

PostgreSQL数据库全攻略:从入门到精通

本文是一份PostgreSQL数据库综合指南,涵盖安装配置、基础操作和高级管理。主要内容包括:1) PostgreSQL简介与各平台安装方法;2) 数据库基本操作,如创建数据库/表、CRUD操作、用户权限管理;3) 高级功能包括索引优化、事务控制、视图、存储过程、触发器和扩展模块;4) 数据库管理维护,涉及配置调优、备份恢复、性能监控和日常维护;5) 安全设置与高可用方案。指南提供了从入门到进阶的实用知识,强调结合官方文档进行深入学习,帮助用户高效使用这一功能强大的开源关系型数据库系统。

索大神的博客 1970

内部类序列化出错

内部类序列化出错  java对象传输很多需要先将对象序列化,当对内部类进行序列化的时候,程序运行会报异常:不能将没有实现序列化接口的Object序列化。  怎么回事,这是一个很简单的内部类,的确已经实现了序列化接口了,其定义的成员都是可序列化的String类型;将其换成普通类没有问题。难道不能使用序列化的内部类?  其实我们使用的内部类是嵌套类(nested class)的一种,而nested cl

huazi5dgan的专栏 3370

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3409

内部类不能序列化的原因

android 编写两个Activity class Data implements Serializable{ /** *  */ private static final long serialVersionUID = -6798751495700613794L; /** *  */ private String name; private String brand;

Sheendn的专栏 2963

注意力机制篇 | YOLOv8改进之在C2f模块添加EMA注意力机制(附2种改进方法)

EMA(Exponential Moving Average)注意力机制是一种用于增强模型性能的注意力机制,它通过对模型的特征图进行加权平均来提取更有用的特征信息。具体来说,EMA注意力机制通过引入一个权重因子来调整特征图中每个位置的重要性,从而使模型能够更好地关注重要的特征。🌈

小哥谈 4180

RAGFlow 系列教程 第14课:GraphRAG -- 知识图谱增强检索

RAGFlow v0.25.0深度解读了GraphRAG技术,通过构建知识图谱解决传统RAG在多跳推理问题上的局限。系统支持General GraphRAG和Light GraphRAG两种实现,包含四阶段构建流程:实体关系抽取、实体消解、社区检测和图持久化。核心代码位于rag/graphrag目录,采用LLM驱动的抽取机制,结合编辑距离和LLM确认的实体消解策略,以及Leiden社区检测算法。KGSearch模块通过多信号融合检索(实体+关系+N-hop+社区)实现高效查询。该系统将非结构化文本转化为可推

weixin_43674738的博客 101

java里JSON使用中TypeToken为什么要用匿名内部类创建的真正原因(泛型擦除)

java里Json中的TypeToken与泛型的密切联系

qq_51598480的博客 2207

流体动力学仿真软件:CFX_(10).案例实践:复杂流场分析

在“Phases”选项卡中,定义参与仿真的不同相。例如,如果您要分析气液两相流,可以定义“Air”和“Water”两个相。

kkchenjj的博客 1690

浅谈Gson和fastjson使用中的坑

相信大家在代码编写中都用过Gson和fastjson吧,用来进行 Java对象和json字符串之间的转换。 本篇文章就主要介绍博主在工作中使用这两款工具时遇到的坑和对应的解决办法。 觉得有用的可以点个赞哈~ 1.前言 看了下我上一篇文章的发布时间,已然是两个月前了,这两个月工作确实很忙,加班也不少,空闲的时间都去研究别的技术了(后面会写文章),这次先用此篇文章记录我这段时间工作中遇到的坑,其实写文章的主要目的也是想记录一下问题,便于帮助他人也便于自己以后查看,废话不多说,开始说明问题~ 2.Gson和f.

程序猿刘川枫 701

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android开发中混淆后Gson序列化、反序列化的那些坑

GSON的序列化与反序列化 GSON是一个很好的工具,使用它我们可以轻松的实现序列化和反序列化.但是当它一旦遇到混淆,就需要我们注意了. 一个简单的类Item,用来处理序列化和反序列化 public class Item { public String name; public int id; } 序列化的代码 Item toSerializeItem = new Item(); toSerializeItem.id = 2; toSerializeItem.name = "

Dream It Possible 4423

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

GSON序列化问题深度分析与Jackson对比

/ 序列化null值// 格式化输出// 支持复杂Map key// 自定义日期格式// 字段命名策略// 排除字段策略@Override= null;// 自定义忽略注解。

ma451152002的专栏 792

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

解决Android开发中,ActiveAndroid和Gson同时使用,对象序列化失败的问题

ActiveAndroid是安卓开发常用的ORM框架。 Gson则是Google提供的轻量级序列化框架,非常适合Android开发使用。 但这两者同时使用,会产生序列化失败的问题。你通常会收到如下信息: java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: [your mo

daditao的专栏 1258

Gson序列化LinkedHashMap.Entry失败的探索

文章目录问题重现原因探究验证结论使用Gson序列化LinkedHashMap本身为什么没问题其他拓展总结 问题重现 示例代码如下: Map<String, Object> map = new LinkedHashMap<>(); map.put("name", "xujian"); map.put("age", 25); Gson gson = new Gson(); for (Map.Entry<String,

徐小陌的博客 774

android开发中混淆后Gson序列化、反序列化的那些坑,从零基础到精通,收藏这篇就够了!

自定义混淆方案适用于大部分的项目#指定压缩级别#不跳过非公共的库的类成员#混淆时采用的算法field/*,!#把混淆类中的方法名也混淆了#优化时允许访问并修改有修饰符的类和类的成员#将文件来源重命名为“SourceFile”字符串#保留行号#保持泛型#保持所有实现 Serializable 接口的类成员#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下# 保持测试相关的代码。

QIANDXX的博客 1292

使用GSON反序列化Date与Timestamp

将Date类型的引入包有sql切换为util,并自定义了一个反序列化的类,然后使用Gson进行注册使用。将两种类型的序列化给Gson进行注册使用,分别解析其格式进行返回。而gson序列化的日期类型为年月日时分秒的类型,因此出现错误。对Gson进行serializeNulls()调用即可。定义两个类型的序列化格式。

qq_57015835的博客 446

【Gson五】日期对象的序列化和反序列化

对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:   1. 序列化时,Date对象序列化的字符串日期格式如何 2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题 3. Date A -&gt; str -&gt; Date B,A和B对象是否equals   默认序列化和反序列化     import com.google.gson.Gson...

bit1129的博客 4058

Gson在使用时怎么对JSON容错处理

序 “JSON是一种具有自描述的、独立于语言的、轻量级文本数据交换格式,经常被用于数据的存储和传输。而GSON可以帮我们快速的将JSON数据,在对象之间序列化和反序列化。” GSON 的toJson()和fromJson()这两个方法,是GSON最基本的使用方式,它很直观,也没什么好说的。但当被问及GSON如何对JSON数据容错,如何灵活序列化和反序列化的时候,就有点抓瞎了。 JSON数据容错,最简单的方式是让前后端数据保持一致,就根本不存在容错的问题,但是现实场景中,...

Dream It Possible 2575

Gson深度解析:Java JSON序列化库的全面介绍

Gson深度解析:Java JSON序列化库的全面介绍 【免费下载链接】gson A Java serialization/deserialization library to convert Java Objects into JSON and back ...

gitblog_00059的博客 608
上一篇: docker初学
下一篇: js异步Promise函数简单使用
转的你死
博客等级 码龄15年 2粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值