2016-02-15 1 views
1

la sortie des éléments suivants:HashMap toJson est vide avec JSON

private static class Target extends HashMap<String, String> { 
} 

public static void main(String[] args) { 
    final Moshi build = new Moshi.Builder().build(); 
    final JsonAdapter<Target> adapter = build.adapter(Target.class); 
    final Target value = new Target(); 
    value.put("foo", "bar"); 
    System.out.println(adapter.toJson(value)); 
} 

est {} - j'attendre {"foo":"bar"} - comment puis-je obtenir le résultat attendu?

+0

Side Remarque sans lien: être prudent lorsque héritant des classes telles que HashMap. Il est préférable d'implémenter l'interface Map et de conserver une référence à un HashMap dans la classe, en transmettant les méthodes put, get ... à HashMap. La raison en est que vous êtes lié à des détails de mise en œuvre qui ne sont pas bons et pourraient casser la compatibilité lors du passage d'une version de Java à une autre. D'Effective Java, 2e édition, article 16: 'Contrairement à l'invocation de méthode, l'héritage viole l'encapsulation' ... Je vous encourage fortement à en lire plus à ce sujet! Cela dit, il suffit d'utiliser l'interface dans JsonAdapter –

Répondre

3

classe utilisation Carte non cible tout en créant JsonAdapter

private static class Target extends HashMap<String, String> { 
} 

public static void main(String[] args) { 
    final Moshi build = new Moshi.Builder().build(); 
    final JsonAdapter<Map> adapter = build.adapter(Map.class); 
    final Target value = new Target(); 
    value.put("foo", "bar"); 
    System.out.println(adapter.toJson(value)); 
}