fastjson反序列化嵌套类为对应实体类 ResultObject的反序列化及泛型优化

 

内部类反序列化问题

工程中,常常使用ResultObject类或者Msg类作为通用返回类型

@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.toJSONString(Object javaObject)

jsonObject.toJSONString()

分别如下所示

//序列化为JSON串
Object object =reqMsg.getData();
String strJSON= JSON.toJSONString(object);
//再反序列化
UserMeeting userMeeting = JSON.parseObject(strJSON, UserMeeting.class)
//强转为JSONObject 
JSONObject jsonObject = (JSONObject) reqMsg.getData();
//先序列化为JSONString,再反序列化
UserMeeting userMeeting = JSON.parseObject(jsonObject.toJSONString(), 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) testResult.getData()).getName());

反序列化成功后

猜你喜欢

转载自blog.csdn.net/evanxuhe/article/details/81178327