- 问题描述:当一个序列化对象的一个object属性里存放了一个map,map中存放了序列化对象本身,反序列化的时候会出问题。引用本身的key-value,value变成了当前的map
- 我们的用例
Map<String,Object> map=new HashMap();
map.put("roleResource类型", roleResource)
map.put("accountDO类型", accountDO);
map.put("account类型",account);
account.setObj(map);
byte[] bytes = JSON.toJSONString(account, SerializerFeature.WriteClassName).getBytes("utf-8");
AccountaccountDeserialize= JSON.parseObject(new String(bytes, "utf-8"), Account.class);
- account为序列化对象实体类本身。
- obj为object类型
4条答案
按热度按时间wr98u20j1#
更新到1.2.16 发现反序列化回来 "account类型"的value 成了 jsonObject(size=0)
t1qtbnec2#
用最新版本1.2.21试试看
3lxsmp7m3#
1.2.21这个版本没解决,而且又发现一个bug。
图片解释地址
新bug ,自身一个object属性储存自身会丢失,反序列化回来为null。(obj为Object 类型)
图片解释地址
`/**
*/
public class Account extends Base implements Serializable {
private Object obj;`
kdfy810k4#
写了一个示例
`package com.yuantu.other;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
/**
*/
public class Other {
public static void main(String[] args) throws UnsupportedEncodingException {
}
}
class Aob{
private String pstr;
private long plon;
private Integer pint;
private Object pobj;
}
class AoC extends Aob{
private String cstr;
private String cobj;
}`