From 7bdec92d8bd417a81f1f89faa32d5798709cb9f7 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 1 Oct 2024 00:09:02 +0800 Subject: [PATCH] fix code --- .../json/serializer/impl/IterTypeAdapter.java | 35 ++++++++++--------- .../json/serializer/impl/MapTypeAdapter.java | 11 +++--- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/IterTypeAdapter.java b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/IterTypeAdapter.java index 45c427b1c..a919e27ba 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/IterTypeAdapter.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/IterTypeAdapter.java @@ -81,6 +81,24 @@ public class IterTypeAdapter implements MatcherJSONSerializer, MatcherJS return deserialize(json, collectionClass, elementType); } + /** + * 从Iterator中读取数据,并添加到JSONArray中 + * + * @param source 源对象,用于检查循环引用 + * @param iter {@link Iterator} + * @param jsonArray {@link JSONArray} + */ + public void mapFromIterator(final Object source, final Iterator iter, final JSONArray jsonArray) { + Object next; + while (iter.hasNext()) { + next = iter.next(); + // 检查循环引用 + if (next != source) { + jsonArray.addObj(next); + } + } + } + /** * 反序列化 * @@ -101,23 +119,6 @@ public class IterTypeAdapter implements MatcherJSONSerializer, MatcherJS return result; } - /** - * 从Iterator中读取数据,并添加到JSONArray中 - * - * @param iter {@link Iterator} - * @param jsonArray {@link JSONArray} - */ - private void mapFromIterator(final Object source, final Iterator iter, final JSONArray jsonArray) { - Object next; - while (iter.hasNext()) { - next = iter.next(); - // 检查循环引用 - if (next != source) { - jsonArray.addObj(next); - } - } - } - /** * 将JSONObject转换为集合 * diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/MapTypeAdapter.java b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/MapTypeAdapter.java index 27c5eb193..f5401f9d5 100644 --- a/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/MapTypeAdapter.java +++ b/hutool-json/src/main/java/org/dromara/hutool/json/serializer/impl/MapTypeAdapter.java @@ -16,7 +16,7 @@ package org.dromara.hutool.json.serializer.impl; -import org.dromara.hutool.core.convert.CompositeConverter; +import org.dromara.hutool.core.convert.ConvertUtil; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.reflect.TypeUtil; import org.dromara.hutool.core.text.StrUtil; @@ -62,8 +62,10 @@ public class MapTypeAdapter implements MatcherJSONSerializer>, Matcher @Override public JSON serialize(final Map bean, final JSONContext context) { + + final JSON contextJson = context.getContextJson(); // 序列化为JSONArray - if(context.getContextJson() instanceof JSONArray){ + if(contextJson instanceof JSONArray){ final Iterator iter; if(bean instanceof Iterator){ iter = (Iterator) bean; @@ -72,7 +74,8 @@ public class MapTypeAdapter implements MatcherJSONSerializer>, Matcher } else{ iter = bean.entrySet().iterator(); } - return IterTypeAdapter.INSTANCE.serialize(bean, context); + IterTypeAdapter.INSTANCE.mapFromIterator(bean, iter, (JSONArray) contextJson); + return contextJson; } // Map to JSONObject @@ -94,7 +97,7 @@ public class MapTypeAdapter implements MatcherJSONSerializer>, Matcher for (final Map.Entry entry : (JSONObject) json) { map.put( // key类型为String转目标类型,使用标准转换器 - CompositeConverter.getInstance().convert(keyType, entry.getKey()), + ConvertUtil.convert(keyType, entry.getKey()), ObjUtil.apply(entry.getValue(), (value)-> value.toBean(valueType)) ); }