问题描述
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 (将#修改为@)