【问题标题】:Gson Custom Deserializer is not working for String ArrayGson 自定义反序列化器不适用于字符串数组
【发布时间】:2016-06-15 09:51:25
【问题描述】:

我使用 Realm 作为数据库,但它不能直接保存字符串数组。所以,我必须在保存之前将其转换为自定义对象。这就是我编写自定义反序列化器的原因。但是,我发现反序列化器在调试期间没有捕获 json。 (但我将 String[].class 更改为 String.class,它会捕获“Peter”)

现在我来自服务器的 json 是

{
"name":"Peter", "role":[
"user", "admin" ] }

注册反序列化器处理字符串数组的代码:

Gson gson =
   new GsonBuilder()
   .registerTypeHierarchyAdapter(String[].class, new ListStringResponseDeserializer())

【问题讨论】:

    标签: android gson realm


    【解决方案1】:

    您可以尝试使用http://realmgenerator.eu - 将您的 JSON 粘贴到那里,您将获得您的自定义对象来存储字符串(但您必须选中 “使用类 RealmInt 和 RealmString 用于原始数组” 复选框)。 然后使用 GsonBuilder 创建 Gson 对象,就像这里 https://gist.github.com/jocollet/91d78da9f47922dc26d6

    【讨论】:

    【解决方案2】:

    您的响应不是字符串数组,而是包含字符串数组的对象。你可以像这样反序列化它:

    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    
    class Test {
    
        class Root {
            String name;
            String[] role;
        }
    
        public static void main(String args[]) {
            // JSON from question
            String json = "{\n"+
                    "\n"+
                    "   \"name\":\"Peter\",\n"+
                    "   \"role\":[\n"+
                    "\n"+
                    "      \"user\",\n"+
                    "      \"admin\"\n"+
                    "   ]\n"+
                    "}\n"+
                    "\n";
    
            Gson gson = new GsonBuilder().create();
            Root root = gson.fromJson(json, Root.class);
            System.out.println(root.name);
            for (String s: root.role) {
                System.out.println(s);
            }
        }
    }
    

    输出

    Peter
    user
    admin
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2019-12-28
      相关资源
      最近更新 更多