package com.alibaba.json.bvt.bug; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import com.alibaba.fastjson.JSON; import junit.framework.TestCase; public class Bug_for_issue_318 extends TestCase { public void test_for_issue() throws Exception { Person o1 = new Person("zhangsan", 20); Person o2 = new Person("liuXX", 30); Person o3 = new Person("Test", 10); List<Person> users = new ArrayList<Person>(); users.add(o1); users.add(o2); users.add(o3); List<Person> managers = new ArrayList<Person>(); managers.add(o2); managers.add(o3); PersonAll pa = new PersonAll(); pa.setCount(30); // map Map<String, List<Person>> userMap = new LinkedHashMap<String, List<Person>>(); userMap.put("managers", managers); userMap.put("users", users); pa.setUserMap(userMap); // bean的属性 pa.setUsers(users); pa.setManagers(managers); // String json = JSON.toJSONString(pa, SerializerFeature.DisableCircularReferenceDetect); String json = JSON.toJSONString(pa); // System.out.println("序列化: "); // System.out.println(json); PersonAll target = JSON.parseObject(json, PersonAll.class); // System.out.println("反序列化结果: "); // System.out.println("map users: " + target.getUserMap().get("users")); // System.out.println("map managers: " + target.getUserMap().get("managers")); // // // 可能是个 "BUG" 第一个元素总是为null // System.out.println("bean users: " + target.getUsers()); // System.out.println("bean managers: " + target.getManagers()); // // System.out.println(JSON.toJSONString(target)); Assert.assertNotNull(target.getUsers().get(0)); Assert.assertNotNull(target.getManagers().get(0)); } private static class Person { private String name; private Integer age; public Person(){} public Person(String name, Integer age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } private static class PersonAll { private Map<String, List<Person>> userMap = new HashMap<String, List<Person>>(); private Integer count; private List<Person> users; private List<Person> managers; public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Map<String, List<Person>> getUserMap() { return userMap; } public void setUserMap(Map<String, List<Person>> userMap) { this.userMap = userMap; } public List<Person> getUsers() { return users; } public void setUsers(List<Person> users) { this.users = users; } public List<Person> getManagers() { return managers; } public void setManagers(List<Person> managers) { this.managers = managers; } } }