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

Cheok Yan Cheng

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

HashMap<Integer, String> map = gson.fromJson(json_string,  new TypeToken<HashMap<Integer, String>>(){}.getType());

但是,我有以下课程

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成为类成员?

这是工作代码示例

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());
        }
    }
}
Sotirios Delimanolis

将您的字段声明为HashMaps。缺少这些,您将需要使用自定义解串器。

但是,如果您正在使用Map,为什么还要关心它是aLinkedHashMap还是a HashMap

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将XML字符串反序列化为类

避免将JSON字符串令牌反序列化为数字属性

将JSON字符串反序列化为Class

无法将 json 字符串反序列化为 ac# 类

使用接口数据成员将JSON字符串反序列化为Java对象时出错

GSON将字符串反序列化为两个整数

GSON:JSON反序列化为变量类型(列表/字符串)

将JSON字符串或字符串数组反序列化为Vec

如何使用JSON-B将JSON字符串反序列化为非公共类?

通过类的字符串名称将JSON对象反序列化为运行时动态创建的特定实例

当我将json字符串反序列化为c#对象时为空类

将字符串反序列化为双倍

将字符串反序列化为Google TokenResponse

将字符串数组反序列化为csv

将请求字符串反序列化为数组

将Mongodb字符串反序列化为对象

将具有特殊字符的JSON反序列化为字符串

C#Json.net将嵌套的json反序列化为字符串

将Json Schema反序列化为Json字符串或对象

使用JSON.NET将JSON数组反序列化为字符串数组

将json字符串反序列化为通用类型的列表

无法将 Json 文件反序列化为带有字符串“key”的 KeyValuePair 列表

将JSON字符串反序列化为Java Object

将Json字符串反序列化为对象Java

F#将JSON反序列化为字符串或节点

将JSON数组反序列化为字符串数组

将json从字符串反序列化为DataContract的方法中的匿名类型

将json字符串反序列化为对象c#.net

将json字符串反序列化为python中的对象