グーグル-gsonとJSONシリアライズ/デシリアライズジェネリック型
-
25-09-2019 - |
質問
まあ、私は私がJavaでジェネリック型
が得意ではないよ告白しなければなりません私は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);
}
これは、C#でうまく動作します。今、私が変換しようとしている、または少なくとも、Javaで別のJSONシリアライズ/デシリアライズクラスを記述します。私が試したの flexjson とグーグル-gson のが、私はJavaで
ここで誰かが私を助けてもらえますか?ところで、私が好むのグーグル-gson の
解決
でのJavaデータ・バインダーが使用するどのような種類を知っているので、ちょうど、パラメータを入力し、実際の型消去されたクラスを渡す必要がありません。何かのようなので:
public static T LoadFromJSONString<T>(string strRequest, Class<T> type)
{
Gson gson = new Gson();
return gson.fromJson(strRequest, type);
}
これは、通常は、逆シリアル化のために必要とされます。シリアライズするとき、あなたはライブラリが使用できるクラスとインスタンスを持っています。
ところで、あなたが使用することを検討することをお勧めします一つの他の良いのJava JSONライブラリは、ジャクソンです。しかし、この特定の例のためにあなたが言及すべてのライブラリが動作するはずです。
他のヒント
私は考えていないを介してこれを考えた後、それはあなたのC#コードで行われているように、かなりとしてこれを解決する方法があります。このため、Javaコンパイラによって行わ型消去のます。
あなたのための最善の解決策は、おそらくあなたはシリアル化/デシリアライズする必要があるオブジェクトの種類を知っている場所でGsonオブジェクトを使用することです。
あなたはそれがどのようなタイプのパラメータを必要としないので、1つの静的は、少なくとも、作成したコースキープのことができますGsonオブジェクト毎回のインスタンスを作るに熱心していない場合ます。
これは動作するはずます:
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);
}
}