0

我从服务响应中得到 JSONObject。

好吧,如果发生错误,我需要将其转换为错误类之一。

Json 有点像

{"message":"This means that the userID is not valid.","name":"UserNotFoundException"}

其中 name 可以是模型包中的任何异常

我可以这样做吗?

Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));

如何将 ex 转换为 UserNotFoundException 类,以便我可以使用它的方法,即 ex.doSomething()

4

3 回答 3

2

如果你真的需要这样做(虽然这通常很少做),看看反射:Java 如何从字符串实例化一个类

于 2013-08-06T10:40:32.927 回答
0

您实际上并没有在代码中转换任何内容,而是使用自己的命名约定检索类实例。message稍后您需要使用JSON 对象创建该异常类的实例。

铸造是完全不同的事情,要获得一些理解,你可以看看这个答案

问题是,您不能将 JSON 对象转换为 Java 类,就像您不能将 DOM 树转换为 Java 对象树一样。您可以做的(每个人都做的)是将 JSON 对象编组/解组到 Java 类。这意味着,创建与 JSON 对象结构匹配的 Java 类的实例,然后将该 Java 类的属性映射到 JSON 对象的属性。

因此,在您的代码中,它看起来像:

Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));
Constructor cons = ex.getConstructor(String.class);
UserNotFouncException unfe = (UserNotFoundException) cons.newInstance(jsonObject.getString("message"));  // here is where actual casting is happening

注意:请注意,上面的代码可能会引发您需要注意的异常。

于 2013-08-06T10:42:22.490 回答
0

您可以使用 GSON。它可以轻松序列化和反序列化 json 数据..

供参考-> https://code.google.com/p/google-gson/

于 2013-08-06T10:43:05.477 回答