首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用gson在Android中转换JSON对象

使用gson在Android中转换JSON对象
EN

Stack Overflow用户
提问于 2013-03-29 05:35:17
回答 1查看 306关注 0票数 0

我是Java和Android的新手,所以请容忍我。我试图创建一个调用wcf服务并将返回结果从JSON转换为Java对象的函数(我将类型作为对象t传递),但它在t上抛出了一个空指针异常,它必须为null,因为我只想传递一个正确类型的对象,以便在转换时填充。请帮帮我。

代码语言:javascript
运行
复制
    public static String Post(String serviceURL, Map<String, String> entites,
        Class<?> t) {
    String responseString = "";
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);


            Gson gson = new GsonBuilder().create();
            //now we will try to convert the class to the specified type.
            t = (Class<?>) gson.fromJson(responseString, t);



    } catch (Exception e) {

        responseString = e.toString();

    }
    return responseString;

非常感谢。

经过几次尝试,我最终得到了这段代码,但我仍然面临着空指针异常。

代码语言:javascript
运行
复制
    MemberInfo mem = new MemberInfo();

    TypeToken<MemberInfo> m = null ;
    ServiceCaller.Post(getString(R.string.LoginService), values , m);


            Gson gson = new GsonBuilder().create();
            //now we will try to convert the class to the specified type.
            t = (TypeToken<T>) gson.fromJson(responseString, (Type) t);
EN

回答 1

Stack Overflow用户

发布于 2013-10-05 23:53:10

据我所知,这是不可能的。为了做到这一点,gson必须能够仅从序列化的字符串中检测到正确的类。但是,可以用许多有效的方式解释单个字符串。例如,在gson网站上举个例子:

代码语言:javascript
运行
复制
class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  BagOfPrimitives() {
    // no-args constructor
  }
}

在此类的实例上使用Gson.toJson会产生以下字符串:

代码语言:javascript
运行
复制
{"value1":1,"value2":"abc"}

但是,如果我让另一个类在所有方面都与第一个类相同,除了名称:

代码语言:javascript
运行
复制
class SackOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  SackOfPrimitives() {
    // no-args constructor
  }
}

然后,这也将被序列化为相同的字符串:

代码语言:javascript
运行
复制
{"value1":1,"value2":"abc"}

我的观点是,给定一个像{"value1":1,"value2":"abc"}这样的字符串,gson无法确定是否应该将其反序列化为BagOfPrimitives类型的对象或SackOfPrimitives类型的对象。因此,您必须始终为gson提供正确的类型,因为gson不可能自己找出它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15692612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档