Проблема заключается в том, что тип данных, содержащихся в массиве, неизвестен до времени выполнения.Я создал контрольный пример, чтобы проиллюстрировать мою проблему.Все работает нормально, пока не доходит до массивов.
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());
}
Кстати: ниже приведен полный код.