使用json反序列化java泛型集合
我正在尝试序列化和去序列化来自hibernate的答案。使用json反序列化java泛型集合,java,json,hibernate,generics,gson,Java,Json,Hibernate,Generics,Gson,我正在尝试序列化和去序列化来自hibernate的答案。 几乎成功。 首先,我使用 Collections.checkedList(session.createCriteria(DealBean.class).add(Restrictions.eq("account", account)).list(), DealBean.class); 然后我序列化它(使用gson)并将结果发送给客户机 在客户机中,我尝试使用 Type type = new TypeToken<Collection&
几乎成功。
首先,我使用
Collections.checkedList(session.createCriteria(DealBean.class).add(Restrictions.eq("account", account)).list(), DealBean.class);
然后我序列化它(使用gson)并将结果发送给客户机
在客户机中,我尝试使用
Type type = new TypeToken<Collection<DealBean>>(){}.getType();
List<DealBean> dealsForAccount = (List<DealBean>)Json.from(SomeAnswerString);
Type Type=new-TypeToken(){}.getType();
List dealsForAccount=(List)Json.from(SomeAnswerString);
现在-我得到了JsonParseException。我认为hibernate返回的列表是另一种类型java.util.Collections$CheckedRandomAccessList
我得到以下异常(如下)。
1.有什么建议吗?
2.我的选择正确吗?我可以在服务器上强制转换结果吗
JsonParseException:JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@a17378未能反序列化json对象{“type”:“java.util.Collections$CheckedRandomAccessList”,“content:”[{“ID\”:5,“tradable\”:{“ID\”:5,“tradableName\”:“Tradable1\”,“moneyMultiplier\”:1},“Action\”:“buy\”,“amount\”:501.0,\“price”\:50.3,:50.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:1},\'Action\':\'sell\'\“投资组合:”:2,,“portfolioName\”::::“Portfo利对对我来说,:“Portfo利对对我来说,:“Portfo利奥2\”,,“账户::”::,,,“账户:::”:10.1.0,,,,“价格”价格::50.4,:10.1.1.1.1.1.1.1.1.1::1.1.1.1:1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.0,,,,,,,,,,“价格::::1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.0,,,,“贸易2\,“货币乘数”:1},\”“投资组合”50.5,“投资组合”10.5,”投资组合:“::,,,,“投资组合”10.5,”投资组合:2,,“投资组合对对我来说,:::“投资组合对对对我来说,”对对叶叶叶利安来说::“投资组合对我来说:,,,,,,“账户”账户:“:,,,,,,,,,,“账户”账户:::::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:8,“tradableName\:\“Tradable2\,\”“价格”50.6,“价格”50.6,,“价格”50.6,,“投资组合”10.6,,,“投资组合”10.6,,,“投资组合”10.6,,,“投资组合”10.6,::2,,,“投资组合”10.2,:2,:2,,,“投资组合”对道路道路对对我来说,对道路对道路对我来说来说对我来说来说对我来说来说对我来说,对道路对对对我来说对我来说来说对对我来说来说对我来说来说来说对对我来说对对我来说对对对我来说来说对我来说对对对我来说对对对我来说来说对对对对对我来说来说来说对对对对对对来说来说来说来说对对对对对对对对对对来说来说来说来说来说来说对对对对对对对来说来说来说来说来说对对对对对对对对对对来说来说来说来说来说来说来说对对对对对对对对对对对对对
在com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:63)上
在com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)上
位于com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:76)
在com.google.gson.ObjectNavigator.accept上(ObjectNavigator.java:98)
位于com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
位于com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51)
位于com.google.gson.gson.fromJson(gson.java:495)
位于com.google.gson.gson.fromJson(gson.java:444)
位于com.google.gson.gson.fromJson(gson.java:396)
位于positions.server.services.positionServerServicesInternalwrapertest.testGetPositionsForPortfolio(positionServerServicesInternalwrapertest.java:134)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:44)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:41)
位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
位于org.junit.internal.runners.statements.runafter.evaluate(runafter.java:31)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:236)
位于org.junit.runner.JUnitCore.run(JUnitCore.java:157)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
原因:java.lang.IllegalStateException:这不是JSON数组。
位于com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:100)
在com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize上(DefaultTypeAdapters.java:468)
在com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize上(DefaultTypeAdapters.java:435)
在com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:50)上
... 还有31个
List al=new ArrayList();
新增(银行1);
新增(银行2);
字符串alStr=Json.toWrap(al);//
列出真实的;
Gson Gson=新的Gson();
Type Type=new-TypeToken(){}.getType();
List listFromJson=gson.fromJson(alStr,type);
类型java.util.Collections$CheckedRandomAccessList
是由另一个列表生成的包装器,它确保添加到列表中的任何内容都与相应的类型签名匹配。除非您有办法指定如何创建支持列表和类型(也称为j的实例)
List<BankBean> al = new ArrayList<BankBean>();
al.add(bank1);
al.add(bank2);
String alStr = Json.toWrap(al); //
List<BankBean> reAl;
Gson gson = new Gson();
Type type = new TypeToken<Collection<BankBean>>(){}.getType();
List<String> listFromJson = gson.fromJson(alStr,type);
List<Object> mySerializableList = new ArrayList<Object>(myList);