Skip to content

Commit ab87657

Browse files
committed
JSONField#deserializeFeatures & JSONField#serializeFeatures support config FieldBased
1 parent 4ab1a06 commit ab87657

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderBaseModule.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,13 +1194,14 @@ private void getFieldInfo(FieldInfo fieldInfo, JSONField jsonField) {
11941194
}
11951195
}
11961196

1197+
boolean ignore = !jsonField.deserialize();
11971198
if (!fieldInfo.ignore) {
1198-
fieldInfo.ignore = !jsonField.deserialize();
1199+
fieldInfo.ignore = ignore;
11991200
}
12001201

12011202
for (JSONReader.Feature feature : jsonField.deserializeFeatures()) {
12021203
fieldInfo.features |= feature.mask;
1203-
if (fieldInfo.ignore && feature == JSONReader.Feature.FieldBased) {
1204+
if (fieldInfo.ignore && !ignore && feature == JSONReader.Feature.FieldBased) {
12041205
fieldInfo.ignore = false;
12051206
}
12061207
}

core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterBaseModule.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.alibaba.fastjson2.writer;
22

3-
import com.alibaba.fastjson2.JSONFactory;
4-
import com.alibaba.fastjson2.JSONPObject;
5-
import com.alibaba.fastjson2.JSONPath;
6-
import com.alibaba.fastjson2.JSONWriter;
3+
import com.alibaba.fastjson2.*;
74
import com.alibaba.fastjson2.annotation.*;
85
import com.alibaba.fastjson2.codec.BeanInfo;
96
import com.alibaba.fastjson2.codec.FieldInfo;
@@ -897,8 +894,9 @@ private void loadFieldInfo(FieldInfo fieldInfo, JSONField jsonField) {
897894
}
898895
}
899896

897+
boolean ignore = !jsonField.serialize();
900898
if (!fieldInfo.ignore) {
901-
fieldInfo.ignore = !jsonField.serialize();
899+
fieldInfo.ignore = ignore;
902900
}
903901

904902
if (jsonField.unwrapped()) {
@@ -907,6 +905,9 @@ private void loadFieldInfo(FieldInfo fieldInfo, JSONField jsonField) {
907905

908906
for (JSONWriter.Feature feature : jsonField.serializeFeatures()) {
909907
fieldInfo.features |= feature.mask;
908+
if (fieldInfo.ignore && !ignore && feature == JSONWriter.Feature.FieldBased) {
909+
fieldInfo.ignore = false;
910+
}
910911
}
911912

912913
int ordinal = jsonField.ordinal();

core/src/test/java/com/alibaba/fastjson2/issues_2300/Issue2350.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.alibaba.fastjson2.JSON;
44
import com.alibaba.fastjson2.JSONReader;
5+
import com.alibaba.fastjson2.JSONWriter;
56
import com.alibaba.fastjson2.annotation.JSONField;
67
import org.junit.jupiter.api.Test;
78

@@ -15,19 +16,19 @@ public void test() {
1516
"\t\"testField\": \"My Test\",\n" +
1617
"\t\"testField2\": \"My Test2\"\n" +
1718
"}";
18-
TestClass testClass = JSON.parseObject(json, TestClass.class);
19-
assertEquals("My Test", testClass.getTestField());
20-
assertNull(testClass.getTestField2());
19+
Bean bean = JSON.parseObject(json, Bean.class);
20+
assertEquals("My Test", bean.testField);
21+
assertNull(bean.getTestField2());
22+
23+
String str = JSON.toJSONString(bean);
24+
System.out.println(str);
2125
}
2226

23-
public static class TestClass {
24-
@JSONField(deserializeFeatures = JSONReader.Feature.FieldBased)
27+
public static class Bean {
28+
@JSONField(deserializeFeatures = JSONReader.Feature.FieldBased, serializeFeatures = JSONWriter.Feature.FieldBased)
2529
private String testField;
2630
private String testField2;
2731

28-
public String getTestField() {
29-
return testField;
30-
}
3132
public String getTestField2() {
3233
return testField2;
3334
}

0 commit comments

Comments
 (0)