范例
Type userType = new TypeToken<Result<User>>(){}.getType();
public static void main(String[] args) {
Gson gson = new Gson();
String jsonStr = "{'name':'mangliu','age':'20'}";
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user.toString());
}
在fromJson方法里
public <T> T fromJson(String json, Type typeOfT) throws JsonSyntaxException {
// classOft向上转型为Type
Object object = fromJson(json, (Type) classOfT);
···
if (json == null) {
return null;
}
···
// json封装为流对象
StringReader reader = new StringReader(json);
···
JsonReader jsonReader = newJsonReader(reader );
···
boolean oldLenient = reader.isLenient();
reader.setLenient(true);
boolean oldLenient = reader.isLenient();
reader.setLenient(true);//不严格按照Json标准语法
//先做一次语法检查,并获取第一个非空字符,通过这个非空字符来标记下一个解析格式。
reader.peek();
isEmpty = false;
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);
TypeAdapter<T> typeAdapter = getAdapter(typeToken);
T object = typeAdapter.read(reader);
return target;
}
classOfT向上转型为Type,json封装进流对象StringReader中,再将reader包装为JsonReader对象,最后将classOft类型转换为TypeToken,再由TypeToken生成对应的TypeAdapter
TypeAdapters
- 这个类中定义了几乎所有的基础类型的TypeAdapter和Factory
网友评论