Skip to content

Commit 2bd4b7e

Browse files
committed
improve support custom deserialize & serialize
1 parent 59c7c76 commit 2bd4b7e

40 files changed

Lines changed: 531 additions & 129 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.alibaba.fastjson2.function;
2+
3+
import java.util.function.BiConsumer;
4+
5+
public final class FieldBiConsumer<T>
6+
implements BiConsumer<T, Object> {
7+
public final int fieldIndex;
8+
public final FieldConsumer<T> consumer;
9+
10+
public FieldBiConsumer(int fieldIndex, FieldConsumer<T> consumer) {
11+
this.fieldIndex = fieldIndex;
12+
this.consumer = consumer;
13+
}
14+
15+
@Override
16+
public void accept(T object, Object fieldValue) {
17+
consumer.accept(object, fieldIndex, fieldValue);
18+
}
19+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.alibaba.fastjson2.function;
2+
3+
@FunctionalInterface
4+
public interface FieldConsumer<T> {
5+
void accept(T object, int fieldIndex, Object fieldValue);
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.alibaba.fastjson2.function;
2+
3+
@FunctionalInterface
4+
public interface FieldSupplier<T> {
5+
Object get(T object, int fieldIndex);
6+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.alibaba.fastjson2.function;
2+
3+
import java.util.function.Function;
4+
5+
public final class FieldSupplierFunction<T>
6+
implements Function<T, Object> {
7+
public final FieldSupplier<T> supplier;
8+
public final int fieldIndex;
9+
10+
public FieldSupplierFunction(FieldSupplier<T> supplier, int fieldIndex) {
11+
this.supplier = supplier;
12+
this.fieldIndex = fieldIndex;
13+
}
14+
15+
@Override
16+
public Object apply(T object) {
17+
return supplier.get(object, fieldIndex);
18+
}
19+
}

core/src/main/java/com/alibaba/fastjson2/internal/asm/ASMUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public class ASMUtils {
6666
public static final String TYPE_OBJECT_WRITER = ObjectWriter.class.getName().replace('.', '/');
6767
public static final String TYPE_JSON_WRITER = JSONWriter.class.getName().replace('.', '/');
6868
public static final String TYPE_FIELD_WRITER = FieldWriter.class.getName().replace('.', '/');
69+
public static final String TYPE_OBJECT = "java/lang/Object";
6970

7071
public static final String DESC_FIELD_WRITER = 'L' + FieldWriter.class.getName().replace('.', '/') + ';';
7172
public static final String DESC_FIELD_WRITER_ARRAY = "[" + DESC_FIELD_WRITER;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.lang.reflect.*;
1111
import java.time.*;
1212
import java.util.*;
13+
import java.util.function.BiConsumer;
1314
import java.util.function.Function;
1415

1516
import static com.alibaba.fastjson2.util.JDKUtils.UNSAFE;
@@ -529,4 +530,8 @@ static ObjectReader createFormattedObjectReader(Type fieldType, Class fieldClass
529530
}
530531
return null;
531532
}
533+
534+
public BiConsumer getFunction() {
535+
return null;
536+
}
532537
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
9494
public Object readFieldValue(JSONReader jsonReader) {
9595
return jsonReader.readBigDecimal();
9696
}
97+
98+
@Override
99+
public BiConsumer getFunction() {
100+
return function;
101+
}
97102
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
9696
public Object readFieldValue(JSONReader jsonReader) {
9797
return jsonReader.readBigInteger();
9898
}
99+
100+
@Override
101+
public BiConsumer getFunction() {
102+
return function;
103+
}
99104
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
6363
public Object readFieldValue(JSONReader jsonReader) {
6464
return jsonReader.readBool();
6565
}
66+
67+
@Override
68+
public BiConsumer getFunction() {
69+
return function;
70+
}
6671
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,9 @@ public void readFieldValue(JSONReader jsonReader, T object) {
6767
public Object readFieldValue(JSONReader jsonReader) {
6868
return jsonReader.readDouble();
6969
}
70+
71+
@Override
72+
public BiConsumer getFunction() {
73+
return function;
74+
}
7075
}

0 commit comments

Comments
 (0)