Pergunta

Bem, eu tenho que confessar que não sou bom em tipo genérico em java

Eu escrevi uma classe JSON Serialize/Deserialize em 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 bem em C#. Agora estou tentando converter, ou pelo menos, escreva outra classe JSON Serialize/Deserialize em Java. eu tentei Flexjson e Google-Gson Mas eu não sei como especificaru003CT> em java.

Alguém aqui poderia me ajudar? BTW, eu prefiro Google-Gson

Foi útil?

Solução

Em Java, você deve passar pela classe real e não apenas por parâmetro de tipo, portanto, os ligantes de dados sabem que tipo de uso; Então, algo como:

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

Mas isso geralmente é necessário apenas para a desserialização; Ao serializar, você tem uma instância com uma classe que as bibliotecas podem usar.

Btw, uma outra boa biblioteca Java JSON que você pode querer considerar usar é Jackson; No entanto, para este exemplo em particular, todas as bibliotecas que você mencionam devem funcionar.

Outras dicas

Depois de pensar nisso, acho que não há uma maneira de resolver isso tão bonito quanto é feito no seu código C#. Isso devido ao apagamento do tipo feito pelo compilador Java.

A melhor solução para você provavelmente seria usar o objeto GSON no local em que você conhece o tipo de objeto necessário para serializar/desesterializar.

Se você não estiver interessado em fazer instâncias do objeto GSON toda vez que você pode, obviamente, manter esse estático, pelo menos, pois não precisa de nenhum parâmetros de tipo quando criado.

Isso deve 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top