如何使用Gson

时间:2016-05-02 17:38:09

标签: java android gson

我有一些对象。 这些对象的目的是“装载”用户配置文件。

public class Profile {

    private Long userId;
    private String userName;
    private String accessToken;
    private Map<Integer,Parameter> parameters;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String setUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    public Map<Integer, Parameter> getParameters() {
        return parameters;
    }

    public void setParameters(Map<Integer, Parameter> parameters) {
        this.parameters = parameters;
    }
}

参数是通用的。 有时它是Parameter<Boolean>, 有时参数是对象列表。 目标是防止与服务器耦合。

public class Parameter<T> {

    private String name;
    private T value;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

这是Json响应的一个示例(部分) ...

"accessToken": "token-bla-bla",
"userId": 28,
"userName": "xpto",
"parameters": {
  "1": {
    "name": "stores",
    "value": [
      {
        "code": 8268,
        "name": "Store One",
        "offers": true
      }
    ]
  },
  "2": {
    "name": "applyDiscount",
    "value": true
  },

...

   "22": {
     "name": "sellers",
     "value": [
       {
         "id": 33,
         "nome": "John Meyer"
       }
     ]
   },

欢迎任何答案! 我测试了TypeToken, 输入其他答案的其他样本, 但, 没有人为我工作。

编辑

这里有更多代码来解释这个问题。

public void handlerAllParams(Profile profile){

        Map<Integer, Parameter> parameterMap = profile.getParameters();


        for (Map.Entry<Integer, Parameter> parameterEntry : profile.getParameters().entrySet()) {
            Integer pKey = parameterEntry.getKey();
            Parameter p = parameterEntry.getValue();
            switch (pKey) {
                case 1:
                    Parameter<ArrayList<Store>> storesParameter = parameterEntry.getValue();
                    List<Store> stores = storesParameter.getValue();
                    handleStores(stores);
                    break;

方法handleStores应该在Store对象的ArrayList中转换“Json”参数“1”的一部分。 但, 结果是LinkedTreeMap, 当我尝试转换结果是存储一个“格式错误”的名称字段。 如果我有其他参数,如参数确定, 但是当我有参数&gt;它无法反序列化。 我怎么解决这个问题?

0 个答案:

没有答案