在运行时知道类时,反序列化JSON对象列表

时间:2015-05-12 21:14:20

标签: java json gson

我有一个函数,它接收一个json字符串作为参数,一个类名作为一个对象的字符串。 json实际上是这个对象的列表。我正在尝试从json创建列表,但我没有成功。

以下是在编译时知道类名时解码json的方法:

Type listOfObjects = new TypeToken<List<UsernamePart>>(){}.getType();
Gson gson = new Gson();
List<UsernamePart> parts = gson.fromJson(input, listOfObjects);

完美无缺。但如果我想做这样的事情会发生什么:

// I have a string
String className = "UsernamePart";
// I can easily create a class object
Class<?> clazz = Class.forName(className); 
// and now what?
Type listOfObjects = new TypeToken<List<??????????>>(){}.getType();
Gson gson = new Gson();
List<UsernamePart> parts = gson.fromJson(input, listOfObjects);

2 个答案:

答案 0 :(得分:3)

<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding}">
            <Label Content="{Binding Class.Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

答案 1 :(得分:0)

不幸的是,您无法在运行时参数化Generic。必须始终在编译时知道该类型。