JSON序列化/反序列化的泛型类型与谷歌,GSON
-
25-09-2019 - |
题
好吧,我不得不承认,我不擅长用Java
泛型类型我已经写了一个JSON序列化/反序列化使用C#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 ,但我不知道如何指定
有人能在这里帮助我吗?顺便说一句,我更喜欢的谷歌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对象的位置,你知道对象的类型,你需要序列化/反序列化。
如果你不热衷于做一个静态的,至少,因为它不需要任何类型的参数创建过程时保持你可以在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);
}
}
不隶属于 StackOverflow