0

我正在使用json-lib将 json 对象转换为 java。代码如下:

public class JsonConvertorDemo {

    public static void main(String[] args) {
        B b1 = new B("b1");
        Map<String, B> bMap = new HashMap<String, B>();
        bMap.put("key1", b1);
        A a1 = new A(bMap);

        JSONObject jsonObject = JSONObject.fromObject(a1);
        String json = jsonObject.toString();
        jsonObject = JSONObject.fromObject(json);

        Map<String, Class> classMap = new HashMap<String, Class>();
        classMap.put("bMap", Map.class);
        a1 = (A) JSONObject.toBean(jsonObject, A.class, classMap);

        bMap = a1.getbMap();
        System.out.println(bMap.get("key1").getB1());
    }
}

public class A {
    private Map<String, B> bMap = new HashMap<String, B>();
    public A() {}
    public A(Map<String, B> bMap) {
        this.bMap = bMap;
    }
    public Map<String, B> getbMap() {
        return bMap;
    }
    public void setbMap(Map<String, B> bMap) {
        this.bMap = bMap;
    }
}

public class B {
    private String b1;
    public B() {}
    public B(String b1) {
        this.b1 = b1;
    }
    public String getB1() {
        return b1;
    }
    public void setB1(String b1) {
        this.b1 = b1;
    }
}

它抛出以下异常:

线程“主”java.lang.ClassCastException 中的异常:
net.sf.ezmorph.bean.MorphDynaBean 无法
在 code.orgexample.json.JsonConvertorDemo.main(JsonConvertorDemo.java:30) 处转换​​为 code.orgexample.json.B

有没有办法在 json-lib 中指定地图值的类类型?

非常感谢您的帮助。

4

5 回答 5

1

这里fromObject接受 JSON 格式的字符串、Maps、DynaBeans 和 JavaBeans

于 2011-06-20T13:58:07.733 回答
1

正如 chro 所说:

这里说 fromObject 接受 JSON 格式的字符串、Maps、DynaBeans 和 JavaBeans

在我的代码中,ClassCastException 是由以下原因引起的:

for (TheClass childNode : command.getChildren()) {

将代码更改为以下内容时,一切都按预期工作:

for (Object childNode : command.getChildren()) {
        JSONObject fromObject = JSONObject.fromObject(childNode);
        TheClass childCommand = (TheClass) JSONObject.toBean(fromObject,
            TheClass.class);
    }
于 2013-04-24T08:56:56.100 回答
1

http://hw1287789687.iteye.com/admin/blogs/1993048

JsonConfig jsonConfig = new JsonConfig();

    jsonConfig.setRootClass(Class2.class);
    Map<String, Class> classMap = new HashMap<String, Class>();
    classMap.put("students", Student.class); // 指定JsonRpcRequest的request字段的内部类型
    jsonConfig.setClassMap(classMap);
于 2013-12-20T08:29:42.390 回答
0

有没有办法在 json-lib 中指定地图值的类类型?

没有。反序列化为 aList<CustomType>时也是如此,即使您在toBean调用中告诉它您想要什么类型。

调用 后toBean,集合中的值将是DynaBeans。您必须遍历集合值并将它们变形为首选类型。变形可以手动完成,一次一个字段,或者以更自动的方式完成,net.sf.ezmorph.Morpher注册在MorpherRegistry.

警告:即使使用这种方法,在将值变形为目标类型的实例之前,您也必须小心如何引用该值。编译器(以及运行时)认为该值是参数化类型(如果使用泛型),因此它很乐意尝试将其用作该类型。这当然会导致 ClassCastException (即使您的代码没有进行任何显式类型转换)。因此,在访问这些值时,只需通过声明类型的引用Object并使用它来获取它们。不要尝试在没有显式Object类型引用的情况下以任何其他方式使用这些值。(当您编写代码并看到错误时,您就会知道我在说什么。我现在太忙了,无法编写示例。)

于 2011-06-24T04:20:29.033 回答
0

为了尽快解决问题,请提交您所有的 JsonConverterDemo、A 和 B 类的代码。尤其是缺少包声明、导入语句和行号,这阻碍了您确定问题所在。

于 2011-05-14T11:21:32.353 回答