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;
}
}
}