Frage

Nun, ich muss zugeben, dass ich bei generischer Typ in Java bin nicht gut

Ich habe eine JSON serialisieren / deserialisieren Klasse in C # geschrieben mit 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);
    }

Es funktioniert gut in C #. Jetzt versuche ich, zu konvertieren, oder zumindest, schreiben andere JSON serialisieren / deserialisieren Klasse in Java. Ich habe versucht, flexjson und Google-Gson , aber ich weiß nicht, wie zu spezifizieren in Java.

Könnte mir hier jemand helfen? Btw, ich ziehe Google-Gson

War es hilfreich?

Lösung

In Java müssen Sie tatsächliche Typ-gelöschten Klasse übergeben, nicht nur Parameter eingeben, so dass die Daten Bindemittel wissen, welche Art zu verwenden; so etwas wie:

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

aber ist dies in der Regel nur für die Deserialisierung benötigt; wenn die Serialisierung, haben Sie eine Instanz mit einer Klasse, die Bibliotheken verwenden können.

Btw, eine andere gute Java JSON Bibliothek Sie vielleicht zu prüfen, mit Jackson ; jedoch für dieses Beispiel alle Bibliotheken, die Sie erwähnen sollte funktionieren.

Andere Tipps

Nachdem ich dies durch Ich glaube nicht, gibt es eine Möglichkeit, dies als ziemlich zu lösen, wie es in Ihrem C # -Code erfolgt. Dies, weil der Typ Löschung durch die Java-Compiler getan.

Die beste Lösung für Sie wäre wahrscheinlich das Gson Objekt an der Stelle zu benutzen, wo Sie die Art des Objekts wissen müssen Sie serialize / deserialisieren.

Wenn Sie daran interessiert, nicht Instanzen des Objekts jedes Mal Gson auf, dass Sie natürlich behalten, dass man statisch zumindest, da es keine Typparameter benötigt, wenn erstellt.

Dies sollte funktionieren:

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top