好吧,我必须承认我不擅长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 和 google-gson ,但我不知道如何指定&lt; T&gt;在Java。
有人可以帮助我吗?顺便说一句,我更喜欢 google-gson
答案 0 :(得分:9)
在Java中,您必须传递实际类型擦除的类,而不仅仅是类型参数,因此数据绑定器知道要使用的类型;所以像:
public static T LoadFromJSONString<T>(string strRequest, Class<T> type)
{
Gson gson = new Gson();
return gson.fromJson(strRequest, type);
}
但通常只需要反序列化;在序列化时,你有一个具有库可以使用的类的实例。
顺便说一句,您可能要考虑使用的另一个优秀的Java JSON库是Jackson;但是,对于这个特定的例子,你提到的所有库都可以工作。
答案 1 :(得分:1)
经过深思熟虑之后,我认为没有办法像在C#代码中那样解决这个问题。这是因为java编译器完成了类型擦除。
最好的解决方案可能是在您知道需要序列化/反序列化的对象类型的位置使用Gson对象。
如果你不是每次都热衷于制作Gson对象的实例,你当然至少可以保持一个静态,因为它在创建时不需要任何类型参数。
答案 2 :(得分:-1)
这应该有效:
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);
}
}