content: package com.alibaba.json.bvt;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import junit.framework.Assert;
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONObject;
  import com.alibaba.fastjson.TypeReference;
  
  public class TypeReferenceTest extends TestCase {
  
      @SuppressWarnings("rawtypes")
      public void test_0() throws Exception {
          String text;
  
          {
              Map<String, Bean> map = new HashMap<String, Bean>();
              map.put("a", new Bean(123, "马加爵"));
              map.put("b", new Bean(234, "药家鑫"));
              map.put("c", new Bean(456, "刘大伟"));
  
              text = JSON.toJSONString(map);
          }
  
          System.out.println(text);
  
          {
              Map<String, Bean> map = JSON.parseObject(text, new TypeReference<Map<String, Bean>>() {}); // 注意这里
              Assert.assertEquals(3, map.size());
              Assert.assertEquals(123, ((Bean) map.get("a")).getId());
              Assert.assertEquals(234, ((Bean) map.get("b")).getId());
              Assert.assertEquals(456, ((Bean) map.get("c")).getId());
      
              Assert.assertEquals("马加爵", ((Bean) map.get("a")).getName());
              Assert.assertEquals("药家鑫", ((Bean) map.get("b")).getName());
              Assert.assertEquals("刘大伟", ((Bean) map.get("c")).getName());
          }
          
          {
              Map map = JSON.parseObject(text, new TypeReference<Map>() {}); // 注意这里
              Assert.assertEquals(3, map.size());
              Assert.assertEquals(123, ((JSONObject) map.get("a")).get("id"));
              Assert.assertEquals(234, ((JSONObject) map.get("b")).get("id"));
              Assert.assertEquals(456, ((JSONObject) map.get("c")).get("id"));
              
              Assert.assertEquals("马加爵", ((JSONObject) map.get("a")).get("name"));
              Assert.assertEquals("药家鑫", ((JSONObject) map.get("b")).get("name"));
              Assert.assertEquals("刘大伟", ((JSONObject) map.get("c")).get("name"));
          }
          
          {
              Map map = JSON.parseObject(text, new TypeReference<JSONObject>() {}); // 注意这里
              Assert.assertEquals(3, map.size());
              Assert.assertEquals(123, ((JSONObject) map.get("a")).get("id"));
              Assert.assertEquals(234, ((JSONObject) map.get("b")).get("id"));
              Assert.assertEquals(456, ((JSONObject) map.get("c")).get("id"));
              
              Assert.assertEquals("马加爵", ((JSONObject) map.get("a")).get("name"));
              Assert.assertEquals("药家鑫", ((JSONObject) map.get("b")).get("name"));
              Assert.assertEquals("刘大伟", ((JSONObject) map.get("c")).get("name"));
          }
      }
  
      public static class Bean {
  
          private int    id;
          private String name;
  
          public Bean(){
  
          }
  
          public Bean(int id, String name){
              this.id = id;
              this.name = name;
          }
  
          public int getId() {
              return id;
          }
  
          public void setId(int id) {
              this.id = id;
          }
  
          public String getName() {
              return name;
          }
  
          public void setName(String name) {
              this.name = name;
          }
  
      }
  }
  