我正在试图整理和解组一个时髦的 beans 子 . 我稍后在Java中使用该功能 . 我的想法是使用JsonOutput编组对象并使用JsonSlurper解组它 . 我的bean包含一个子对象的映射 .
问题是,JsonSlurper将 Map 的值解组为LazyMap而不是原始对象 . 如果我直接包含对象,则解组工作 .
这是我正在做的一个例子......
import java.util.Map
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
class ClassA {
ClassB subClass
Map<String, ClassB> subClasses = [:]
static def ClassA build(String json){
new JsonSlurper().parseText(json)
}
def String toString() {
JsonOutput.toJson(this)
}
}
......和ClassB ......
import groovy.json.JsonOutput
class ClassB {
String message = [:]
def String toString() {
JsonOutput.toJson(this)
}
}
...这里失败的Java代码......
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.setMessage("Hello World!");
classA.setSubClass(classB);
classA.getSubClasses().put("First", classB);
System.out.println(ClassA.build(classA.toString()).getSubClass().getMessage());
System.out.println(ClassA.build(classA.toString()).getSubClasses().get("First").getMessage());
...第二行打印出“Hello World!”,正如预期的那样,但最后一行失败了...
java.lang.ClassCastException: groovy.json.internal.LazyMap cannot be cast to ClassB
是否有(更好的)方法将一个常规对象编组和解组为json?
此致,托马斯
1 回答
Jackson 的诀窍和工作可靠......
ClassA的
和ClassB