package com.alibaba.json.bvt.bug; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import com.alibaba.fastjson.JSON; public class bug_for_caoyaojun1988 extends TestCase { public void test_for_bug() throws Exception { // 创建 BusinessVO BusinessVO businessVO = new BusinessVO(); businessVO.setName("name"); // 创建 第一个List list中每一个对象都包含 BusinessVO对象 ExpiredDto expiredDto = new ExpiredDto(); expiredDto.setBusinessVO(businessVO); expiredDto.setId(10001); List<ExpiredDto> expiredReports = new ArrayList<ExpiredDto>(); expiredReports.add(expiredDto); // 创建 第二个List list中每一个对象都包含 BusinessVO对象 List<NormalDto> normalReports = new ArrayList<NormalDto>(); { NormalDto normalDto = new NormalDto(); normalDto.setBusinessVO(businessVO); normalDto.setId(10001); normalReports.add(normalDto); } // 创建 需要序列化的对象,包含两个list ReportDto reportDto = new ReportDto(); reportDto.setExpiredReports(expiredReports); reportDto.setNormalReports(normalReports); reportDto.setCompanyId(10004); // 第一个场景 得到的businessVO为null; String serializeStr = (String) JSON.toJSONString(reportDto); System.out.println(serializeStr); ReportDto reuslt = (ReportDto) JSON.parseObject(serializeStr, ReportDto.class); System.out.println(reuslt.getNormalReports().get(0).getBusinessVO()); // 第二个场景 得到的businessVO为正常数据 expiredReports.add(expiredDto); serializeStr = (String) JSON.toJSONString(reportDto); System.out.println(serializeStr); reuslt = (ReportDto) JSON.parseObject(serializeStr, ReportDto.class); System.out.print(reuslt.getNormalReports().get(0).getBusinessVO().getName()); } public static class BusinessVO implements Serializable { private static final long serialVersionUID = -191856665415285103L; private String name; public BusinessVO() { } public void setName(String name) { this.name = name; } public String getName() { return name; } } public static class ExpiredDto implements Serializable { private static final long serialVersionUID = -2361763020563748437L; private Integer id; private BusinessVO businessVO; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public BusinessVO getBusinessVO() { return businessVO; } public void setBusinessVO(BusinessVO businessVO) { this.businessVO = businessVO; } } public static class NormalDto implements Serializable { private static final long serialVersionUID = -2392077150026945111L; private Integer id; private BusinessVO businessVO; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public BusinessVO getBusinessVO() { return businessVO; } public void setBusinessVO(BusinessVO businessVO) { this.businessVO = businessVO; } public static long getSerialversionuid() { return serialVersionUID; } } public static class ReportDto implements Serializable { private static final long serialVersionUID = 4502937258945851832L; private Integer companyId; private List<NormalDto> normalReports; private List<ExpiredDto> expiredReports; public Integer getCompanyId() { return companyId; } public void setCompanyId(Integer companyId) { this.companyId = companyId; } public List<NormalDto> getNormalReports() { return normalReports; } public void setNormalReports(List<NormalDto> normalReports) { this.normalReports = normalReports; } public List<ExpiredDto> getExpiredReports() { return expiredReports; } public void setExpiredReports(List<ExpiredDto> expiredReports) { this.expiredReports = expiredReports; } } }