JSON Serialize / Deserialize Google Type с Google Gson
-
25-09-2019 - |
Вопрос
Ну, я должен признаться, что я не хорош в общем типе в Java
Я написал класс Json Serialize / Deserialize в 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 #. Теперь я пытаюсь конвертировать или по крайней мере, написать еще один класс Json Serialize / Deserialize в Java. я пробовал FlexJSON а также Google-Gson Но я не знаю, как указатьu003CT> в Яве.
Может кто-нибудь здесь помочь мне? Кстати, я предпочитаю Google-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 Compiler.
Лучшее решение для вас, вероятно, будет использовать объект 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);
}
}