为什么我的GSON反序列化器为Option [SomeObject]抛出堆栈溢出?

问题描述

我有一个带选项的case类,我正在尝试序列化/反序列化。

case class Foo(
  bar: Option[OtherObject]
)

为此,我创建了一个这样的自定义序列化器...

class OptionSerializer extends JsonSerializer[Option[Any]] with JsonDeserializer[Option[Any]] {
  override def serialize(
                          t: Option[Any],`type`: Type,context: JsonSerializationContext
                        ): JsonElement = {
    if (t.isDefined) context.serialize(t.get)
    else null
  }

  override def deserialize(
                            json: JsonElement,t: Type,context: JsonDeserializationContext): Option[Any] = {
    if (json.isJsonNull) None
    else {
      context.deserialize(json,t)
    }
  }
}

然后像注册它一样...

def getGson = {
  val gsonBuilder = new GsonBuilder()
  gsonBuilder.registerTypeAdapter(classOf[Option[Any]],new OptionSerializer)
  gsonBuilder.create()
}

但是当我跑步时我会得到...

java.lang.StackOverflowError: null
    at com.google.gson.internal.Streams.parse(Streams.java:48) ~[gson-2.8.6.jar:na]
    at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:65) ~[gson-2.8.6.jar:na]
    at com.google.gson.Gson.fromJson(Gson.java:932) ~[gson-2.8.6.jar:na]
    at com.google.gson.Gson.fromJson(Gson.java:1003) ~[gson-2.8.6.jar:na]
    at com.google.gson.internal.bind.TreeTypeAdapter$GsonContextImpl.deserialize(TreeTypeAdapter.java:162) ~[gson-2.8.6.jar:na]
    at com.....deserializer

我需要能够处理可选的数组和对象。

我想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)