content: package com.alibaba.json.bvt.bug;
  
  import java.util.LinkedHashMap;
  import java.util.Map;
  import java.util.TreeMap;
  
  import org.junit.Assert;
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  public class Bug_for_smoothrat5 extends TestCase {
  
      public void test_map() throws Exception {
          Map<Object, Object> map = new LinkedHashMap<Object, Object>();
          map.put(34L, "b");
          map.put(12, "a");
  
          Entity entity = new Entity();
  
          entity.setValue(map);
  
          String text = JSON.toJSONString(entity, SerializerFeature.WriteClassName);
          System.out.println(text);
          Assert.assertEquals("{\"@type\":\"com.alibaba.json.bvt.bug.Bug_for_smoothrat5$Entity\",\"value\":{\"@type\":\"java.util.LinkedHashMap\",34L:\"b\",12:\"a\"}}",
                              text);
  
          Entity entity2 = JSON.parseObject(text, Entity.class);
          Assert.assertEquals(map, entity2.getValue());
          Assert.assertEquals(map.getClass(), entity2.getValue().getClass());
      }
      
      public void test_treemap() throws Exception {
          TreeMap<Object, Object> map = new TreeMap<Object, Object>();
          map.put(-34L, "b");
          map.put(-56L, "a");
          
  
          Entity entity = new Entity();
  
          entity.setValue(map);
  
          String text = JSON.toJSONString(entity, SerializerFeature.WriteClassName);
          System.out.println(text);
          Assert.assertEquals("{\"@type\":\"com.alibaba.json.bvt.bug.Bug_for_smoothrat5$Entity\",\"value\":{\"@type\":\"java.util.TreeMap\",-56L:\"a\",-34L:\"b\"}}",
                              text);
  
          Entity entity2 = JSON.parseObject(text, Entity.class);
          Assert.assertEquals(map, entity2.getValue());
          Assert.assertEquals(map.getClass(), entity2.getValue().getClass());
      }
  
      public static class Entity {
  
          private Object value;
  
          public Object getValue() {
              return value;
          }
  
          public void setValue(Object value) {
              this.value = value;
          }
      }
  }
  