diff --git a/src/main/java/com/alibaba/fastjson/serializer/FieldSerializer.java b/src/main/java/com/alibaba/fastjson/serializer/FieldSerializer.java index acfebe8ab7..869ae8a3fc 100755 --- a/src/main/java/com/alibaba/fastjson/serializer/FieldSerializer.java +++ b/src/main/java/com/alibaba/fastjson/serializer/FieldSerializer.java @@ -281,6 +281,16 @@ public void writeValue(JSONSerializer serializer, Object propertyValue) throws E return; } + if ((features & SerializerFeature.BrowserCompatible.mask) != 0 + && propertyValue != null + && (fieldInfo.fieldClass == long.class || fieldInfo.fieldClass == Long.class)) { + long value = (Long) propertyValue; + if (value > 9007199254740991L || value < -9007199254740991L) { + serializer.getWriter().writeString(Long.toString(value)); + return; + } + } + valueSerializer.write(serializer, propertyValue, fieldInfo.name, fieldInfo.fieldType, fieldFeatures); } diff --git a/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java b/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java index ee6a808c75..b6c207c84d 100644 --- a/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java +++ b/src/main/java/com/alibaba/fastjson/serializer/SerializeConfig.java @@ -196,6 +196,7 @@ public ObjectSerializer createJavaBeanSerializer(SerializeBeanInfo beanInfo) { if (SerializerFeature.WriteNonStringValueAsString == feature // || SerializerFeature.WriteEnumUsingToString == feature // || SerializerFeature.NotWriteDefaultValue == feature + || SerializerFeature.BrowserCompatible == feature || SerializerFeature.WriteClassName == feature) { asm = false; break; diff --git a/src/test/java/com/alibaba/json/bvt/issue_1700/Issue1764.java b/src/test/java/com/alibaba/json/bvt/issue_1700/Issue1764.java new file mode 100644 index 0000000000..aebb165bb4 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_1700/Issue1764.java @@ -0,0 +1,22 @@ +package com.alibaba.json.bvt.issue_1700; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; + +import static com.alibaba.fastjson.serializer.SerializerFeature.BrowserCompatible; + +public class Issue1764 extends TestCase { + public void test_for_issue() throws Exception { + Model model = new Model(); + model.value = 9007199254741992L; + + String str = JSON.toJSONString(model); + System.out.println(str); + } + + public static class Model { + @JSONField(serialzeFeatures = BrowserCompatible) + public long value; + } +}