package com.alibaba.json.bvt.issue_1000; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONWriter; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.SerializerFeature; import junit.framework.TestCase; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.nio.charset.CodingErrorAction; import java.util.HashMap; import java.util.Map; /** * Created by wenshao on 25/03/2017. */ public class Issue1066 extends TestCase { private static final Charset CHARSET = Charset.forName("UTF-8"); public void test_for_issue() throws Exception { Map<EnumType, EnumType> map = new HashMap<EnumType, EnumType>(); map.put(EnumType.ONE, EnumType.TWO); System.out.println("序列化前的参数为:" + map); ByteArrayOutputStream bos = new ByteArrayOutputStream(); try{ serialize(map, bos); Object desRes = deserialize(bos.toByteArray()); System.out.println("反序列化后的结果为:" + JSON.toJSONString(desRes)); }finally { try{ bos.close(); }catch (IOException e){ } } } public static <T> void serialize(T obj, OutputStream out) { JSONWriter writer = null; try { writer = new JSONWriter(new OutputStreamWriter(out, CHARSET.newEncoder().onMalformedInput(CodingErrorAction.IGNORE))); writer.config(SerializerFeature.QuoteFieldNames, true); writer.config(SerializerFeature.SkipTransientField, true); writer.config(SerializerFeature.SortField, true); writer.config(SerializerFeature.WriteClassName, true); writer.config(SerializerFeature.DisableCircularReferenceDetect, true); writer.writeObject(obj); writer.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (Exception e) { } } } } public static <T> T deserialize(byte[] in) { return (T) JSON.parse(in, 0, in.length, CHARSET.newDecoder(), Feature.AllowArbitraryCommas, Feature.IgnoreNotMatch, Feature.SortFeidFastMatch, Feature.DisableCircularReferenceDetect, Feature.AutoCloseSource); } public static enum EnumType { ONE(1, "1"), TWO(2, "2") ; private int code; private String desc; EnumType(int code, String desc){ this.code = code; this.desc = desc; } @Override public String toString() { return "EnumType{" + "code=" + code + ", desc='" + desc + '\'' + '}'; } } }