diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/ScriptObjectMirrorSerializer.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/ScriptObjectMirrorSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..7f641342d01f419b030da2315ffc4cbdbe24ea9e --- /dev/null +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/ScriptObjectMirrorSerializer.java @@ -0,0 +1,34 @@ +package com.x.base.core.project.gson; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import jdk.nashorn.api.scripting.ScriptObjectMirror; + +public class ScriptObjectMirrorSerializer implements JsonSerializer { + public JsonElement serialize(ScriptObjectMirror scriptObjectMirror, Type type, JsonSerializationContext context) { + if (null == scriptObjectMirror) { + return JsonNull.INSTANCE; + } + if (scriptObjectMirror.isArray()) { + List list = new ArrayList<>(); + for (String str : scriptObjectMirror.getOwnKeys(false)) { + list.add(scriptObjectMirror.get(str)); + } + return XGsonBuilder.instance().toJsonTree(list); + } else { + LinkedHashMap map = new LinkedHashMap<>(); + for (String str : scriptObjectMirror.getOwnKeys(false)) { + map.put(str, scriptObjectMirror.get(str)); + } + return XGsonBuilder.instance().toJsonTree(map); + } + } +} \ No newline at end of file diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/XGsonBuilder.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/XGsonBuilder.java index 9e052ab5fd20c20b9f26b6c1d3459670653604a2..d770ea32d333bca8a7ecbdd0a7600eda9220c5aa 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/XGsonBuilder.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/XGsonBuilder.java @@ -16,6 +16,7 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; import com.x.base.core.project.tools.DateTools; +import jdk.nashorn.api.scripting.ScriptObjectMirror; public class XGsonBuilder { @@ -34,6 +35,7 @@ public class XGsonBuilder { gson.registerTypeAdapter(Long.class, new LongDeserializer()); gson.registerTypeAdapter(Date.class, new DateDeserializer()); gson.registerTypeAdapter(Date.class, new DateSerializer()); + gson.registerTypeAdapter(ScriptObjectMirror.class, new ScriptObjectMirrorSerializer()); INSTANCE = gson.setPrettyPrinting().create(); } } @@ -157,7 +159,7 @@ public class XGsonBuilder { } try { JsonElement jsonElement = new JsonParser().parse(json); - if (jsonElement.isJsonObject()){ + if (jsonElement.isJsonObject()) { return true; } else { return false; @@ -173,7 +175,7 @@ public class XGsonBuilder { } try { JsonElement jsonElement = new JsonParser().parse(json); - if (jsonElement.isJsonArray()){ + if (jsonElement.isJsonArray()) { return true; } else { return false;