Pregunta

Bueno, tengo que confesar que no soy bueno en tipo genérico en Java

He escrito un serializar la clase JSON / deserializar en C # usando 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);
    }

Funciona bien en C #. Ahora estoy tratando de convertir, o al menos, escribir otra clase serializar / deserializar JSON en Java. He intentado Flexjson y Google-GSON , pero no sé cómo especificar en Java.

Podría alguien aquí me puede ayudar? Por cierto, prefiero Google-GSON

¿Fue útil?

Solución

En Java que debe pasar la clase de tipo que se ha borrado real, no sólo el tipo de parámetro, por lo que las carpetas de datos saben qué tipo de uso; así que algo como:

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

pero esto es por lo general sólo resulta necesario para deserialización; cuando la serialización, tiene una instancia de una clase que las bibliotecas pueden utilizar.

Por cierto, otra buena biblioteca de Java JSON es posible que desee considerar el uso es Jackson ; Sin embargo, para este ejemplo particular, todas las bibliotecas que mencionas deben trabajar.

Otros consejos

Después de pensar esto a través No creo que hay una manera de resolver esto tan bonito como se hace en el código C #. Esto debido a la supresión de tipo realizado por el compilador de Java.

La mejor solución para usted probablemente sería utilizar el objeto Gson en el lugar donde se conoce el tipo del objeto que necesita para serializar / deserializar.

Si usted no está interesado en hacer que las instancias del objeto cada vez que Gson Puede, por supuesto torreón que uno al menos estática, ya que no necesita ningún parámetro de tipo cuando creó.

Esto debería funcionar:

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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top