@SerializedName

  • 主要应用在Gson解析json字符串时。Gson能直接将json字符串解析成java对象或者集合,也能将java对象转换为json字符串表示。例如有json数据如下:

    {
        "id":"1"
        "n":"zhangsan"
        "p":"123456"
        "s":"0"
    }
    
  • 它能被解析到下面这个对象

    public class User{
        private String id;
        private String n;
        private String p;
        private string s;
    }
    
  • 默认在字段名相同的字段间解析,所以User类必须要这样写才能直接使用Gson解析出来,但是java对象里的属性名和json里的字段名有时会不一样。Gson提供注解的方法来解决这个问题。

    public class User{
    
        private String id;
    
        @SerializedName("n")
        private String userName;
    
        @SerializedName("p")
        private String password;
    
        @SerializedName("s")
        private String sex;
    }
    

    Expose

  • 通常与@SerializedName连用,当我们不想把某个属性包含到json中时可以用。

    public class UserSimple {  
        @Expose()
        String name; // equals serialize & deserialize
    
        @Expose(serialize = false, deserialize = false)
        String email; 
    
        @Expose(serialize = false)
        int age; 
    
        @Expose(deserialize = false)
        boolean isDeveloper; // equals only serialize
    }
    
  • 序列化的结果将只有name和isDeveloper出现在json中,因为serialize都是false。反序列化时,java对象将只会拥有json中的name和age,因为diserialze是true。