content: package com.alibaba.json.bvt.ref;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.parser.ParserConfig;
  import com.alibaba.fastjson.serializer.SerializeConfig;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  public class TestRef4 extends TestCase {
  
      public void test_0() throws Exception {
          Group admin = new Group("admin");
  
          User jobs = new User("jobs");
          User sager = new User("sager");
          User sdh5724 = new User("sdh5724");
  
          admin.getMembers().add(jobs);
          jobs.getGroups().add(admin);
  
          admin.getMembers().add(sager);
          sager.getGroups().add(admin);
  
          admin.getMembers().add(sdh5724);
          sdh5724.getGroups().add(admin);
          
          sager.setReportTo(sdh5724);
          jobs.setReportTo(sdh5724);
  
          SerializeConfig serializeConfig = new SerializeConfig();
          serializeConfig.setAsmEnable(false);
          String text = JSON.toJSONString(admin, serializeConfig, SerializerFeature.PrettyFormat);
          System.out.println(text);
          
          ParserConfig config = new ParserConfig();
          config.setAsmEnable(false);
          
          JSON.parseObject(text, Group.class, config, 0);
      }
  
      public static class Group {
  
          private String     name;
  
          private List<User> members = new ArrayList<User>();
  
          public Group(){
  
          }
  
          public Group(String name){
              this.name = name;
          }
  
          public String getName() {
              return name;
          }
  
          public void setName(String name) {
              this.name = name;
          }
  
          public List<User> getMembers() {
              return members;
          }
  
          public void setMembers(List<User> members) {
              this.members = members;
          }
  
          public String toString() {
              return this.name;
          }
      }
  
      public static class User {
  
          private String      name;
  
          private List<Group> groups = new ArrayList<Group>();
  
          private User        reportTo;
  
          public User(){
  
          }
  
          public User getReportTo() {
              return reportTo;
          }
  
          public void setReportTo(User reportTo) {
              this.reportTo = reportTo;
          }
  
          public User(String name){
              this.name = name;
          }
  
          public String getName() {
              return name;
          }
  
          public void setName(String name) {
              this.name = name;
          }
  
          public List<Group> getGroups() {
              return groups;
          }
  
          public void setGroups(List<Group> groups) {
              this.groups = groups;
          }
  
          public String toString() {
              return this.name;
          }
      }
  }
  