Skip to content

Commit aa3db15

Browse files
committed
support gson serializeNulls
1 parent 2bebe7a commit aa3db15

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

src/main/java/com/jsoniter/extra/GsonCompatibilityMode.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,18 @@ protected Builder builder() {
2121

2222
public static class Builder extends Config.Builder {
2323
private boolean excludeFieldsWithoutExposeAnnotation = false;
24+
private boolean serializeNulls = false;
2425

2526
public Builder excludeFieldsWithoutExposeAnnotation() {
2627
excludeFieldsWithoutExposeAnnotation = true;
2728
return this;
2829
}
2930

31+
public Builder serializeNulls() {
32+
serializeNulls = true;
33+
return this;
34+
}
35+
3036
public GsonCompatibilityMode build() {
3137
return (GsonCompatibilityMode) super.build();
3238
}
@@ -44,21 +50,28 @@ public boolean equals(Object o) {
4450

4551
Builder builder = (Builder) o;
4652

47-
return excludeFieldsWithoutExposeAnnotation == builder.excludeFieldsWithoutExposeAnnotation;
53+
if (excludeFieldsWithoutExposeAnnotation != builder.excludeFieldsWithoutExposeAnnotation) return false;
54+
return serializeNulls == builder.serializeNulls;
4855
}
4956

5057
@Override
5158
public int hashCode() {
5259
int result = super.hashCode();
5360
result = 31 * result + (excludeFieldsWithoutExposeAnnotation ? 1 : 0);
61+
result = 31 * result + (serializeNulls ? 1 : 0);
5462
return result;
5563
}
5664
}
5765

5866
@Override
5967
public void updateClassDescriptor(ClassDescriptor desc) {
60-
super.updateClassDescriptor(desc);
6168
removeGetterAndSetter(desc);
69+
for (Binding binding : desc.allEncoderBindings()) {
70+
if (builder().serializeNulls) {
71+
binding.shouldOmitNull = false;
72+
}
73+
}
74+
super.updateClassDescriptor(desc);
6275
}
6376

6477
private void removeGetterAndSetter(ClassDescriptor desc) {

src/test/java/com/jsoniter/output/TestGson.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,16 @@ public void test_excludeFieldsWithoutExposeAnnotation() {
7373
output = JsonStream.serialize(config, obj);
7474
assertEquals("{}", output);
7575
}
76+
77+
public void test_serializeNulls() {
78+
TestObject4 obj = new TestObject4();
79+
Gson gson = new GsonBuilder().serializeNulls().create();
80+
String output = gson.toJson(obj);
81+
assertEquals("{\"field1\":null}", output);
82+
83+
GsonCompatibilityMode config = new GsonCompatibilityMode.Builder()
84+
.serializeNulls().build();
85+
output = JsonStream.serialize(config, obj);
86+
assertEquals("{\"field1\":null}", output);
87+
}
7688
}

0 commit comments

Comments
 (0)