Gson

作者: 云木杉 | 来源:发表于2019-02-19 14:06 被阅读0次

范例

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

相关文章

网友评论

      本文标题:Gson

      本文链接:https://www.haomeiwen.com/subject/txvzpftx.html