【发布时间】:2014-07-20 12:52:05
【问题描述】:
我想将一个非常复杂的 java 对象作为值保存到 redis 中。因此,我尝试将此对象转换为 Json(gson lib),但它不适用于我的目的(请参阅其他问题:GSON java.lang.IllegalArgumentException: class 'xx' declares multiple JSON fields named 'XX' AND StackOverflowError)。
我想存储/序列化这个提到的应用程序的复杂 java 对象到 redis 作为一个值并稍后加载回复杂的 java 对象(考虑以下评论:Can Jedis get/set an Java POJO?)。仅用于评估目的。
如何将这个复杂的对象(最好使用 json 转换)存储到 redis 并返回?每条评论都会有帮助
更新 1:到 json 和返回的转换工作正常,但随着应用程序中的进一步处理,系统正在引发 java.util.LinkedHashMap incompatible with XXX。
SuperclassExclusionStrategy ex = new SuperclassExclusionStrategy();
Gson gson = new GsonBuilder().addDeserializationExclusionStrategy(ex).addSerializationExclusionStrategy(ex).create();
String json = gson.toJson(daoResult);
daoResultJson = gson.fromJson(json, JavaObject_DAOListResult.class);
子类中有一些对象没有被转换回原来的状态。
已解决
我已经解决了使用另一个名为 json-io 的库的问题
现在我可以很好地处理我的对象了。在 Gson 中,json 字符串中缺少很多空属性。使用 json-io 也可以转换空属性。这是解决方案:
// convert daoResult to JSON
jsonIO = JsonWriter.objectToJson(daoResult);
// convert stored JSON to daoResult
daoResultJson = (DAOListResult) JsonReader.jsonToJava(jsonIO);
【问题讨论】:
标签: java json object redis gson