2016-06-15 1 views
0

J'utilise Realm comme base de données, mais il ne peut pas enregistrer String Array directement.Ainsi, je dois le convertir en objet personnalisé avant de sauvegarder. C'est pourquoi j'écris deserializer personnalisé. Cependant, je trouve que le désérialiseur n'a pas attrapé le json pendant le débogage. (Mais je change la chaîne [] classe à String.class, il attrape "Peter".)Gson Custom Deserializer ne fonctionne pas pour String Array

Maintenant, mon JSON du serveur est

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

Code de l'enregistrement désérialiseur pour le traitement Tableau chaîne:

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

Répondre

1

vous pouvez essayer d'utiliser http://realmgenerator.eu - coller votre JSON là-bas et vous obtiendrez votre objet personnalisé pour stocker des chaînes (mais vous devez vérifier les « classes d'utilisation RealmInt et RealmString pour les tableaux primitifs » case à cocher). Ensuite, créez un objet Gson en utilisant GsonBuilder comme ici https://gist.github.com/jocollet/91d78da9f47922dc26d6

+0

Réponse acceptée pour https://gist.github.com/jocollet/91d78da9f47922dc26d6 comme il l'a fait attraper le JSON et désérialiser comme ce que je vouloir. Merci. – Rice

0

Votre réponse n'est pas un tableau de chaînes, c'est un objet contenant un tableau de chaînes. Vous pouvez désérialiser comme ceci:

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); 
     } 
    } 
} 

Sortie

Peter 
user 
admin