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 + '\'' +
'}';
}
}
}