Java gson\json反序列化错误
我想使用GSON解析一个JSON对象。一切似乎都很好,但当我试图解析一个更“复杂”的对象时,我得到了一个反序列化错误。我试图解析的对象包含一些原语、堆栈和向量集合 堆栈\向量是否可能导致此问题?我能不能过来一下 错误: Servlet上的代码 toString()中的字符串Java gson\json反序列化错误,java,json,gson,deserialization,Java,Json,Gson,Deserialization,我想使用GSON解析一个JSON对象。一切似乎都很好,但当我试图解析一个更“复杂”的对象时,我得到了一个反序列化错误。我试图解析的对象包含一些原语、堆栈和向量集合 堆栈\向量是否可能导致此问题?我能不能过来一下 错误: Servlet上的代码 toString()中的字符串 我建议您使用数组Player[]而不是通用集合Vector。使用Java泛型进行序列化和反序列化并不容易。如果改用数组,则不会有任何问题 但是如果你展示你的Multiplayer和Player的代码,回答起来就容易多了。举一
我建议您使用数组
Player[]
而不是通用集合Vector
。使用Java泛型进行序列化和反序列化并不容易。如果改用数组,则不会有任何问题
但是如果你展示你的
Multiplayer
和Player
的代码,回答起来就容易多了。举一个JSON失败的例子。Post代码、JSON和堆栈跟踪。否则没人能帮你(这个问题将被解决);多人游戏结果=json.fromJson(answer.toString(),Multiplayer.class);如果我将其从“Multiplayer”更改为“gameboard”,它将正常工作(在servlet上更改为发送“gameboard”类型而不是“Multiplayer”之后),请编辑您的问题并告诉我们答案。toString()返回什么。也就是JSON值。为什么要使用Vector
而不是ArrayList
?多人类公共类多人扩展游戏数据成员私有向量玩家;私人int播放器
游戏类
公共类游戏数据成员受游戏板保护;受保护的布尔值不受XML的影响;受保护字符串xmlpath;受保护的布尔活动函数;受保护的int-currentPlayer;栈消息栈
播放器类
公共类播放器数据成员受保护的字符串名称;受保护的整数点;受保护的布尔型活动函数;受保护的int-id_;受保护字符串cssStyleClass;乔纳斯,谢谢你的回答,我发布了类定义及其数据成员。更改为Player[]目前需要太多的代码更改,只有在没有其他可能性的情况下,我才会这样做。@Shai:这很容易更改,如果您想将其序列化为Json,我建议您这样做。
Exception in thread "AWT-EventQueue-0" com.google.gson.JsonParseException: The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@4e76fba0 failed to deserialize json object [{"name_":"Human","points_":1,"alive_":true,"id_":0,"cssStyleClass":"pressed_p1"},{"name_":"Human","points_":0,"alive_":true,"id_":1,"cssStyleClass":"pressed_p2"}] given the type java.util.Vector<entities.Player>
at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:64)
at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:92)
at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:117)
at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:76)
at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:54)
Gson json = new Gson();
Multiplayer result = json.fromJson(answer.toString(), Multiplayer.class);
Gson gson = new Gson();
Multiplayer game = (Multiplayer)getServletContext().getAttribute("OnlineGame");
String responseStr = gson.toJson(game);
response.setContentType("application/json;charset=UTF-8");
out.write(responseStr);
{serializeNulls:false,serializers:{mapForTypeHierarchy:{Map:MapTypeAdapter,Collection:com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@596e1fb1,InetAddress:com.google.gson.DefaultTypeAdapters$DefaultInetAddressAdapter@4ce2cb55,Enum:EnumTypeAdapter},map:{Integer:IntegerTypeAdapter,URI:UriTypeAdapter,UUID:UuidTypeAdapter,BigInteger:BigIntegerTypeAdapter,URL:UrlTypeAdapter,Short:ShortTypeAdapter,Time:com.google.gson.DefaultTypeAdapters$DefaultTimeTypeAdapter@16bdb503,byte:ByteTypeAdapter,short:ShortTypeAdapter,Number:NumberTypeAdapter,double:com.google.gson.DefaultTypeAdapters$DoubleSerializer@b6e39f,GregorianCalendar:GregorianCalendarTypeAdapter,Calendar:GregorianCalendarTypeAdapter,Byte:ByteTypeAdapter,StringBuilder:StringBuilderTypeAdapter,Float:com.google.gson.DefaultTypeAdapters$FloatSerializer@6719dc16,Locale:LocaleTypeAdapter,StringBuffer:StringBufferTypeAdapter,Date:DefaultDateTypeAdapter(SimpleDateFormat),Character:CharacterTypeAdapter,float:com.google.gson.DefaultTypeAdapters$FloatSerializer@6719dc16,BigDecimal:BigDecimalTypeAdapter,Boolean:BooleanTypeAdapter,boolean:BooleanTypeAdapter,String:StringTypeAdapter,Timestamp:DefaultDateTypeAdapter(SimpleDateFormat),int:IntegerTypeAdapter,long:LongSerializer,Date:com.google.gson.DefaultTypeAdapters$DefaultJavaSqlDateTypeAdapter@52c05d3b,char:CharacterTypeAdapter,Double:com.google.gson.DefaultTypeAdapters$DoubleSerializer@b6e39f,Long:LongSerializer},deserializers:{mapForTypeHierarchy:{Map:MapTypeAdapter,Collection:com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@596e1fb1,InetAddress:com.google.gson.DefaultTypeAdapters$DefaultInetAddressAdapter@4ce2cb55,Enum:EnumTypeAdapter},map:{Integer:IntegerTypeAdapter,URI:UriTypeAdapter,UUID:UuidTypeAdapter,BigInteger:BigIntegerTypeAdapter,URL:UrlTypeAdapter,Short:ShortTypeAdapter,byte:ByteTypeAdapter,Time:com.google.gson.DefaultTypeAdapters$DefaultTimeTypeAdapter@16bdb503,short:ShortTypeAdapter,Number:NumberTypeAdapter,double:DoubleDeserializer,Byte:ByteTypeAdapter,Calendar:GregorianCalendarTypeAdapter,GregorianCalendar:GregorianCalendarTypeAdapter,StringBuilder:StringBuilderTypeAdapter,Float:FloatDeserializer,Locale:LocaleTypeAdapter,StringBuffer:StringBufferTypeAdapter,Date:DefaultDateTypeAdapter(SimpleDateFormat),Character:CharacterTypeAdapter,float:FloatDeserializer,BigDecimal:BigDecimalTypeAdapter,Boolean:BooleanTypeAdapter,boolean:BooleanTypeAdapter,String:StringTypeAdapter,Timestamp:com.google.gson.DefaultTypeAdapters$DefaultTimestampDeserializer@5328f6ee,int:IntegerTypeAdapter,long:LongDeserializer,Date:com.google.gson.DefaultTypeAdapters$DefaultJavaSqlDateTypeAdapter@52c05d3b,char:CharacterTypeAdapter,Double:DoubleDeserializer,Long:LongDeserializer},instanceCreators:{mapForTypeHierarchy:{SortedSet:DefaultConstructorCreator,Set:DefaultConstructorCreator,Queue:DefaultConstructorCreator,Collection:DefaultConstructorCreator,Map:DefaultConstructorCreator},map:{}}