首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免gson将json字符串反序列化为LinkedHashMap类成员。

避免gson将json字符串反序列化为LinkedHashMap类成员。
EN

Stack Overflow用户
提问于 2015-01-22 20:16:39
回答 1查看 730关注 0票数 0

目前,如果我想避免gson从反序列化json字符串到LinkedHashMap,我将使用以下代码

代码语言:javascript
复制
HashMap<Integer, String> map = gson.fromJson(json_string,  new TypeToken<HashMap<Integer, String>>(){}.getType());

但是,我有以下课程

代码语言:javascript
复制
public static class Inventory {
    public Map<Integer, String> map1 = new HashMap<Integer, String>();
    public Map<Integer, String> map2 = new HashMap<Integer, String>();
}

如果我使用Inventory result = gson.fromJson(json_string, Inventory.class);,我的Inventory实例的类成员将作为LinkedHashMap

如何强制反序列化json字符串,使HashMap成为类成员?

下面是工作代码示例

代码语言:javascript
复制
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author yccheok
 */
public class Gson_tutorial {
    public static class Inventory {
        public Map<Integer, String> map1 = new HashMap<Integer, String>();
        public Map<Integer, String> map2 = new HashMap<Integer, String>();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        {
            Map<Integer, String> map= new HashMap<Integer, String>();
            map.put(2, "cake");

            final Gson gson = new GsonBuilder().create();
            final String json_string = gson.toJson(map);
            // {"2":"cake"}
            System.out.println(json_string);

            HashMap<Integer, String> result = gson.fromJson(json_string,  new TypeToken<HashMap<Integer, String>>(){}.getType());
            // class java.util.HashMap
            System.out.println(result.getClass());
        }

        {
            Inventory inventory = new Inventory();
            inventory.map1.put(2, "cake");
            inventory.map2.put(3, "donut");

            final Gson gson = new GsonBuilder().create();
            final String json_string = gson.toJson(inventory);
            // {"map1":{"2":"cake"},"map2":{"3":"donut"}}
            System.out.println(json_string);

            Inventory result = gson.fromJson(json_string,  Inventory.class);
            // class java.util.LinkedHashMap
            System.out.println(result.map1.getClass());
            // class java.util.LinkedHashMap
            System.out.println(result.map2.getClass());
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 20:20:14

将您的字段声明为HashMaps。否则,您将需要使用自定义反序列化器。

但是如果你使用的是Map,你为什么要关心它是LinkedHashMap还是HashMap

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

https://stackoverflow.com/questions/28097902

复制
相关文章

相似问题

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