簡體   English   中英

使用 GSON 從 ClassLouder 類中反序列化泛型類型

[英]Deserializing Generic Types from a ClassLouder class with GSON

我正在嘗試使用 GSON 解析一個 JSON 文件,問題是我使用的是一個以前由 ClassLoader 加載的類。

File root = new File("./build/classes");
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });

Class<?> loadedClass = Class.forName("events.Source", true,classLoader);


// JSON --> Java "Get the actual type"
Type listType = new TypeToken<ArrayList<loadedClass>>() {}.getType(); 

Gson gson = new Gson();

ArrayList<loadedClass> resourcesList = gson.fromJson(jsonString, listType);

這將返回com.google.gson.internal.LinkedTreeMap而不是我自己的加載類列表 有什么幫助嗎?

在此處查看 ParametrizedType 的默認實現:

http://www.java2s.com/Code/Java/Generics/DefaultimplementationoflinkjavalangreflectParameterizedType.htm

准備妥當,這樣的類型可用於表示可與 GSON 一起使用的通用類型。 未經測試,您的代碼可能如下所示:

File root = new File("./build/classes");
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] {
   root.toURI().toURL()
});
Class<?> loadedClass = Class.forName("events.Source", true,classLoader);

// JSON --> Java "Create the actual type"
Type listType = new DefaultParameterizedType(ArrayList.class, loadedClass);

Gson gson = new Gson();
ArrayList<loadedClass> resourcesList = gson.fromJson(jsonString, listType);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM