JSON使用google-gson序列化/反序列化generics类型

好吧,我必须承认我不擅长Java中的generics类型

我使用JavaScriptSerializer在C#中编写了一个JSON序列化/反序列化类

  private static JavaScriptSerializer js = new JavaScriptSerializer(); public static T LoadFromJSONString(string strRequest) { return js.Deserialize(strRequest); } public static string DumpToJSONString(T rq) { return js.Serialize(rq); } 

它在C#中运行良好。 现在我正在尝试转换或至少在Java中编写另一个JSON序列化/反序列化类。 我已经尝试过flexjsongoogle-gson,但我不知道如何在Java中指定。

有人可以帮帮我吗? 顺便说一句,我更喜欢google-gson

在Java中,您必须传递实际类型擦除的类,而不仅仅是类型参数,因此数据绑定器知道要使用的类型; 所以像这样:

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

但通常只需要反序列化; 在序列化时,您有一个具有库可以使用的类的实例。

顺便说一下,你可能想要考虑使用的另一个优秀的Java JSON库是Jackson ; 但是,对于这个特定的例子,你提到的所有库都应该可行。

经过深思熟虑后,我认为没有办法像在C#代码中那样解决这个问题。 这是因为java编译器完成的类型擦除。

最好的解决方案可能是在您知道需要序列化/反序列化的对象类型的位置使用Gson对象。

如果你不是每次都热衷于制作Gson对象的实例,你当然至少可以保持一个静态,因为它在创建时不需要任何类型参数。

这应该工作:

 import com.google.gson.Gson; public class GenericClass { private static Gson gson = new Gson(); public static  T loadFromJSONString(String strRequest) { return (T) gson.fromJson(strRequest, T.class); } public static  String dumpToJSONString(T rq) { return gson.toJson(rq); } }