diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreator.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreator.java index 5cab6a7d9..93b5225d7 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreator.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreator.java @@ -515,7 +515,11 @@ public class ObjectWriterCreator { sameFieldName = (char) (firstChar - 32) + fieldName.substring(1); } if (sameFieldName != null) { - fieldWriterMap.remove(sameFieldName); + FieldWriter sameNameFieldWriter = fieldWriterMap.get(sameFieldName); + if (sameNameFieldWriter != null + && (sameNameFieldWriter.method == null || sameNameFieldWriter.method.equals(method))) { + fieldWriterMap.remove(sameFieldName); + } } } }); diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java index 11908fd41..1b2210b8f 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java @@ -371,8 +371,7 @@ public class ObjectWriterCreatorASM if (sameFieldName != null) { FieldWriter sameNameFieldWriter = fieldWriterMap.get(sameFieldName); if (sameNameFieldWriter != null - && sameNameFieldWriter.method != null - && sameNameFieldWriter.method.equals(method)) { + && (sameNameFieldWriter.method == null || sameNameFieldWriter.method.equals(method))) { fieldWriterMap.remove(sameFieldName); } } diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3600/Issue3649.java b/core/src/test/java/com/alibaba/fastjson2/issues_3600/Issue3649.java index 378119a70..6b7543d65 100644 --- a/core/src/test/java/com/alibaba/fastjson2/issues_3600/Issue3649.java +++ b/core/src/test/java/com/alibaba/fastjson2/issues_3600/Issue3649.java @@ -32,4 +32,89 @@ public class Issue3649 { return userName; } } + + @Test + public void test1() { + UserDTO1 user = new UserDTO1(); + user.setUserName("张三"); + JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user)); + assertEquals(2, jsonObject.size()); + assertEquals(user.getUserName(), jsonObject.getString("UserName")); + assertEquals(user.getUserName(), jsonObject.getString("userName")); + } + + @Data + public static class UserDTO1 { + private String userName; + + @JSONField(name = "UserName") + public String getTheUserName() { + return userName; + } + private String field1; + private String field2; + private String field3; + private String field4; + private String field5; + private String field6; + private String field7; + private String field8; + private String field9; + private String field10; + private String field11; + private String field12; + private String field13; + private String field14; + private String field15; + private String field16; + private String field17; + private String field18; + private String field19; + private String field20; + private String field21; + private String field22; + private String field23; + private String field24; + private String field25; + private String field26; + private String field27; + private String field28; + private String field29; + private String field30; + private String field31; + private String field32; + private String field33; + private String field34; + private String field35; + private String field36; + private String field37; + private String field38; + private String field39; + private String field40; + private String field41; + private String field42; + private String field43; + private String field44; + private String field45; + private String field46; + private String field47; + private String field48; + private String field49; + private String field50; + private String field51; + private String field52; + private String field53; + private String field54; + private String field55; + private String field56; + private String field57; + private String field58; + private String field59; + private String field60; + private String field61; + //第62个序列化是2个 + private String field62; + //第63个序列化是1个 + private String field63; + } }