Question

Eh bien, je dois avouer que je ne suis pas bon type générique en Java

J'ai écrit une classe de sérialisation JSON / deserialize en C # en utilisant JavaScriptSerializer

    private static JavaScriptSerializer js = new JavaScriptSerializer();

    public static T LoadFromJSONString<T>(string strRequest)
    {
        return js.Deserialize<T>(strRequest);
    }

    public static string DumpToJSONString<T>(T rq)
    {
        return js.Serialize(rq);
    }

Il fonctionne bien en C #. Maintenant, je suis en train de convertir, ou du moins, écrire une autre classe JSON linéariser / désérialise en Java. J'ai essayé flexjson et google-gson mais je ne sais pas comment spécifier en Java.

Quelqu'un pourrait-il me aider ici? BTW, je préfère google-gson

Était-ce utile?

La solution

En Java, vous devez passer la classe effacée de type réel, pas il suffit de taper le paramètre, de sorte classeurs de données savent quel type d'utilisation; donc quelque chose comme:

public static T LoadFromJSONString<T>(string strRequest, Class<T> type)
{
    Gson gson = new Gson();
    return gson.fromJson(strRequest, type);
}

mais cela est généralement juste nécessaire pour désérialisation; lors de la sérialisation, vous avez une instance avec une classe que les bibliothèques peuvent utiliser.

BTW, une autre bonne bibliothèque Java JSON vous voudrez peut-être envisager d'utiliser est Jackson ; Cependant, pour cet exemple particulier toutes les bibliothèques que vous mentionnez devraient travailler.

Autres conseils

Après avoir réfléchi à cela par je ne pense pas qu'il y ait un moyen de résoudre ce joli comme il est fait dans votre code C #. Cela en raison de l'effacement de type effectué par le compilateur java.

La meilleure solution pour vous serait probablement d'utiliser l'objet Gson à l'endroit où vous connaissez le type de l'objet dont vous avez besoin de sérialisation / deserialize.

Si vous n'êtes pas désireux de faire des instances de l'objet Gson chaque fois que vous pouvez bien sûr garder que statique au moins, car il n'a pas besoin de paramètres de type lors de sa création.

Cela devrait fonctionner:

import com.google.gson.Gson;
public class GenericClass {

    private static Gson gson = new Gson(); 

    public static <T> T loadFromJSONString(String strRequest)
    {
        return (T) gson.fromJson(strRequest, T.class);
    }

    public static <T> String dumpToJSONString(T rq)
    {
        return gson.toJson(rq);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top