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序列化/反序列化类。 我已经尝试过flexjson和google-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); } }