From 048c718ba2bce05a59f829b7941b64b00a758279 Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 16 Oct 2024 22:50:23 +0800 Subject: [PATCH] json --- .../org/redkale/convert/json/JsonDynEncoder.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java index 59521461e..e1d54a8c6 100644 --- a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java +++ b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java @@ -51,7 +51,7 @@ public abstract class JsonDynEncoder extends ObjectEncoder { if (selfObjEncoder.getMembers().length != elements.size()) { return null; // 存在ignore等定制配置 } - + final int features = factory.getFeatures(); final Map mixedNames = new HashMap<>(); StringBuilder elementb = new StringBuilder(); for (AccessibleObject element : elements) { @@ -80,7 +80,7 @@ public abstract class JsonDynEncoder extends ObjectEncoder { } RedkaleClassLoader loader = RedkaleClassLoader.currentClassLoader(); final String newDynName = "org/redkaledyn/convert/json/_Dyn" + JsonDynEncoder.class.getSimpleName() + "__" - + clazz.getName().replace('.', '_').replace('$', '_') + "_" + factory.getFeatures() + "_" + + clazz.getName().replace('.', '_').replace('$', '_') + "_" + features + "_" + Utility.md5Hex(elementb.toString()); // tiny必须要加上, 同一个类会有多个字段定制Convert try { Class newClazz = loader.loadClass(newDynName.replace('/', '.')); @@ -222,8 +222,12 @@ public abstract class JsonDynEncoder extends ObjectEncoder { mv.visitIntInsn(BIPUSH, '{'); mv.visitMethodInsn(INVOKEVIRTUAL, writerName, "writeTo", "(B)V", false); } + Class firstType = readGetSetFieldType(elements.get(0)); // boolean comma = false; - if (elements.size() > 1) { + if (elements.size() > 1 + && !ConvertFactory.checkNullableFeature(features) + && !((!ConvertFactory.checkTinyFeature(features) || firstType != boolean.class) + && firstType.isPrimitive())) { mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 3); commaLabel = new Label(); @@ -242,7 +246,7 @@ public abstract class JsonDynEncoder extends ObjectEncoder { if (commaLabel != null) { mv.visitVarInsn(ILOAD, 3); // comma 第三个参数 } else { - mv.visitInsn(ICONST_0); // comma=false 第三个参数 + mv.visitInsn(elementIndex == 0 ? ICONST_0 : ICONST_1); // comma=false 第三个参数 } if (mixedNames.containsKey(fieldName)) { // Encodeable 第四个参数 mv.visitVarInsn(ALOAD, 0);