好吧,我不得不承认,我不擅长用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 ,但我不知道如何指定 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对象的位置,你知道对象的类型,你需要序列化/反序列化。

如果你不热衷于做一个静态的,至少,因为它不需要任何类型的参数创建过程时保持你可以在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);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top