3
问题是数组中包含的数据类型直到运行时才会知道。我创建了一个测试用例来说明我的问题。一切工作正常,直到涉及到数组。不能反序列化未知类型的数组使用gson w/java
User user1 = new User(1, "one");
User user2 = new User(2, "two");
User [] users = {user1, user2};
Gson gson = new Gson();
// gson processing array of known a type. WORKS FINE
// observe use of brackets []
String toJson = gson.toJson(users, User[].class);
User [] newUsers = gson.fromJson(toJson, User[].class);
for(User user : newUsers) {
System.out.println(user.toString());
}
// gson processing using reflection for single user. WORKS FINE
final Class<?> userType = Class.forName("com.abc.ws.GsonTest$User");
User user3 = new User(3, "three");
toJson = gson.toJson(user3, userType);
Object newUser = gson.fromJson(toJson, userType);
System.out.println(newUser.toString());
// gson processing using reflection for array of users. FAILS.
toJson = gson.toJson(users, WHAT_TO_PASS_HERE?); // it should be something like: userType[].class but that won't compile
Object newerUsers = gson.fromJson(toJson, WHAT_TO_PASS_HERE?); // it should be something like: userType[].class but that won't compile
for(User user : newerUsers) {
System.out.println(user.toString());
}
btw:下面是完整的代码。
package com.abc;
import com.google.gson.Gson;
public class GsonTest {
public static void main(String[] args) throws Exception {
GsonTest.go();
}
public static void go() throws Exception {
User user1 = new User(1, "one");
User user2 = new User(2, "two");
User [] users = {user1, user2};
Gson gson = new Gson();
// gson processing array of known a type. Works fine
// observe use of brackets []
String toJson = gson.toJson(users, User[].class);
User [] newUsers = gson.fromJson(toJson, User[].class);
for(User user : newUsers) {
System.out.println(user.toString());
}
// gson processing using reflection for single user. Works fine.
final Class<?> userType = Class.forName("com.abc.GsonTest$User");
User user3 = new User(3, "three");
toJson = gson.toJson(user3, userType);
Object newUser = gson.fromJson(toJson, userType);
System.out.println(newUser.toString());
// gson processing using reflection for array of users. Fails.
toJson = gson.toJson(users, WHAT_TO_PASS_HERE?); // it should be something like: userType[].class but that won't compile
Object newerUsers = gson.fromJson(toJson, WHAT_TO_PASS_HERE?); // it should be something like: userType[].class but that won't compile
for(User user : newerUsers) {
System.out.println(user.toString());
}
}
public static class User {
private int id;
private String name;
public User() { }
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "id: " + this.id + ", name: " + this.name;
}
}
}
那精美的作品!谢谢!! – siiva33 2011-02-28 15:45:31
@ siiva33,很高兴为您提供帮助。不要忘记接受答案) – 2011-02-28 15:48:48