经过一段源码阅读,很好奇fastjson是怎样序列化,它是怎样判断children类型,先通过反射类的方法和属性,然后生成一堆拼接json的代码,为什么要这样,生成一个类就可以重用,不用每次都反射,效率太慢,mapStuct也是这样原理
其中这段代码
List var13 = (List)var10.getChildren();
通过asm
public class ASMSerializer_1_CourseCategoryResponse extends JavaBeanSerializer implements ObjectSerializer {
public Type children_asm_fieldType = ASMUtils.getMethodType(CourseCategoryResponse.class, "getChildren");
public ObjectSerializer children_asm_list_item_ser_;
public ObjectSerializer children_asm_ser_;
public Type coures_asm_fieldType = ASMUtils.getMethodType(CourseCategoryResponse.class, "getCoures");
public ObjectSerializer coures_asm_list_item_ser_;
public ObjectSerializer coures_asm_ser_;
public ASMSerializer_1_CourseCategoryResponse(SerializeBeanInfo var1) {
super(var1);
}
public void write(JSONSerializer var1, Object var2, Object var3, Type var4, int var5) throws IOException {
if (var2 == null) {
var1.writeNull();
} else {
SerializeWriter var9 = var1.out;
if (!this.writeDirect(var1)) {
this.writeNormal(var1, var2, var3, var4, var5);
} else if (var9.isEnabled(32768)) {
this.writeDirectNonContext(var1, var2, var3, var4, var5);
} else {
CourseCategoryResponse var10 = (CourseCategoryResponse)var2;
if (!this.writeReference(var1, var2, var5)) {
if (var9.isEnabled(2097152)) {
this.writeAsArray(var1, var2, var3, var4, var5);
} else {
SerialContext var11 = var1.getContext();
var1.setContext(var11, var2, var3, 0);
char var12 = '{';
String var6 = "children";
List var13 = (List)var10.getChildren();