diff --git a/src/main/java/com/alibaba/fastjson/serializer/ASMSerializerFactory.java b/src/main/java/com/alibaba/fastjson/serializer/ASMSerializerFactory.java index 791c37dbdd..18b8439645 100755 --- a/src/main/java/com/alibaba/fastjson/serializer/ASMSerializerFactory.java +++ b/src/main/java/com/alibaba/fastjson/serializer/ASMSerializerFactory.java @@ -61,7 +61,7 @@ static class Context { private Map variants = new HashMap(); private int variantIndex = 9; - private boolean nonContext; + private final boolean nonContext; public Context(FieldInfo[] getters, // SerializeBeanInfo beanInfo, // @@ -72,7 +72,7 @@ public Context(FieldInfo[] getters, // this.className = className; this.beanInfo = beanInfo; this.writeDirect = writeDirect; - this.nonContext = nonContext; + this.nonContext = nonContext || beanInfo.beanType.isEnum(); } public int var(String name) { diff --git a/src/main/java/com/alibaba/fastjson/serializer/JavaBeanSerializer.java b/src/main/java/com/alibaba/fastjson/serializer/JavaBeanSerializer.java index 7a04683573..a66995953c 100644 --- a/src/main/java/com/alibaba/fastjson/serializer/JavaBeanSerializer.java +++ b/src/main/java/com/alibaba/fastjson/serializer/JavaBeanSerializer.java @@ -138,7 +138,9 @@ protected void write(JSONSerializer serializer, // } SerialContext parent = serializer.context; - serializer.setContext(parent, object, fieldName, this.beanInfo.features, features); + if (!this.beanInfo.beanType.isEnum()) { + serializer.setContext(parent, object, fieldName, this.beanInfo.features, features); + } final boolean writeAsArray = isWriteAsArray(serializer, features); diff --git a/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest.java b/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest.java index cee6c5673c..2d37512477 100644 --- a/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest.java +++ b/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest.java @@ -20,6 +20,14 @@ public void test_field() throws Exception { assertEquals("{\"orderType\":{\"remark\":\"结算单\",\"value\":2}}", text); } + public void test_field_2() throws Exception { + Model model = new Model(); + model.orderType = OrderType.SettleBill; + model.orderType1 = OrderType.SettleBill; + String text = JSON.toJSONString(model); + assertEquals("{\"orderType\":{\"remark\":\"结算单\",\"value\":2},\"orderType1\":{\"remark\":\"结算单\",\"value\":2}}", text); + } + @JSONType(serializeEnumAsJavaBean = true) public static enum OrderType { PayOrder(1, "支付订单"), // @@ -36,5 +44,6 @@ private OrderType(int value, String remark) { public static class Model { public OrderType orderType; + public OrderType orderType1; } } diff --git a/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest_private.java b/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest_private.java index 12b28cdac5..2fd7ea105a 100644 --- a/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest_private.java +++ b/src/test/java/com/alibaba/json/bvt/SerializeEnumAsJavaBeanTest_private.java @@ -21,6 +21,14 @@ public void test_field() throws Exception { assertEquals("{\"orderType\":{\"remark\":\"结算单\",\"value\":2}}", text); } + public void test_field_2() throws Exception { + Model model = new Model(); + model.orderType = OrderType.SettleBill; + model.orderType1 = OrderType.SettleBill; + String text = JSON.toJSONString(model); + assertEquals("{\"orderType\":{\"remark\":\"结算单\",\"value\":2},\"orderType1\":{\"remark\":\"结算单\",\"value\":2}}", text); + } + @JSONType(serializeEnumAsJavaBean = true) private static enum OrderType { PayOrder(1, "支付订单"), // @@ -37,5 +45,6 @@ private OrderType(int value, String remark) { private static class Model { public OrderType orderType; + public OrderType orderType1; } }