fastjson反序列化嵌套类为对应实体类ResultObject的反序列化
及泛型优化
内部类反序列化问题
⼯程中,常常使⽤ResultObject类或者Msg类作为通⽤返回类型
object to@Data
public class Msg {
private String type;
//data字段,Object类型,通常需要转换为对应实体类
private Object data;
}
其中data字段类型为Object类,但是⼯程中往往需要将其序列化成对应的实体类
最近遇见这个问题⽐较头痛,没法直接类型强转为对应实体类,于是打了个断点测试了下
我们发现:
对于Object类型内部类,fastJson(jackson也类似)会将其转换为JSONObject类,其中每个字段是HashMap的键值对
内部类反序列化
因此,我们有两种思路:
序列化为JSON串,再反序列化
将JsonObject转换为JsonString,并使⽤parseObject将其反序列化,其中序列化为JSON串有两种办法,
分别如下所⽰
//序列化为JSON串
Object object =Data();
String strJSON= JSONString(object);
//再反序列化
UserMeeting userMeeting = JSON.parseObject(strJSON, UserMeeting.class)
//强转为JSONObject
JSONObject jsonObject = (JSONObject) Data();
//先序列化为JSONString,再反序列化
UserMeeting userMeeting = JSON.JSONString(), UserMeeting.class);
使⽤泛型(推荐)
在fastJson反序列化时,指定内部的泛型T为对应的TestInner实体类,拓展性很好
@Data
public class TestResult<T> {
private String type;
private T data;
}
//使⽤TypeReference指定TestResult对应的内部泛型TestInner
TestResult testResult =JSON.parseObject(jsonStr,new TypeReference<TestResult<TestInner>>(){}); System.out.println(((TestInner) Data()).getName());
反序列化成功后
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论