From 95531b02bd579b1e1d7d9226edb334359c889454 Mon Sep 17 00:00:00 2001 From: zhourui Date: Thu, 30 Jul 2020 18:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DscriptObjectMirror?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gson/ScriptObjectMirrorSerializer.java | 34 +++++++++++++++++++ .../base/core/project/gson/XGsonBuilder.java | 6 ++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 o2server/x_base_core_project/src/main/java/com/x/base/core/project/gson/ScriptObjectMirrorSerializer.java 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 0000000000..7f641342d0 --- /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 9e052ab5fd..d770ea32d3 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; -- GitLab