Domanda

Beh, devo confessare che non sono bravo a tipo generico in Java

Ho scritto un JSON serializzare / deserializzare classe in C # utilizzando 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);
    }

Funziona bene in C #. Ora sto cercando di convertire, o almeno, scrivere un altro JSON classe serializzare / deserializzare in Java. Ho provato flexjson e google-GSON , ma non so come specificare in Java.

Potrebbe qualcuno qui mi può aiutare? Btw, io preferisco google-GSON

È stato utile?

Soluzione

In Java si deve passare classe reale di tipo cancellato, non solo tipo di parametro, in modo da raccoglitori di dati sanno che tipo di utilizzo; quindi qualcosa di simile:

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

, ma questo di solito è solo necessario per la deserializzazione; durante la serializzazione, si dispone di un'istanza con una classe che le biblioteche possono utilizzare.

A proposito, un altro bene libreria Java JSON si potrebbe voler considerare l'utilizzo è Jackson ; tuttavia, per questo particolare esempio tutte le librerie di cui parli dovrebbe funzionare.

Altri suggerimenti

Dopo aver pensato questo attraverso Non credo ci sia un modo per risolvere questo bella come si è fatto in codice C #. Ciò a causa della cancellazione di tipo fatta dal compilatore Java.

La soluzione migliore per voi sarebbe probabilmente per utilizzare l'oggetto GSON nella posizione in cui si conosce il tipo di oggetto è necessario per serializzare / deserializzare.

Se non sei incline a fare le istanze dell'oggetto ogni GSON Ovviamente si può tenere che uno statico, almeno, dal momento che non ha bisogno di parametri di tipo quando ha creato.

Questo dovrebbe funzionare:

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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top