Gson Custom Deserializer不适用于String Array

时间:2016-06-15 09:51:25

标签: android gson realm

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

现在我的服务器json是

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

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

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

2 个答案:

答案 0 :(得分:1)

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

一样

答案 1 :(得分:0)

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

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