一、Gson失常解析

个别状况下咱们应用Gson将Json字符串解析成Java实体数据类时,Json字段和Java字段是一一对应且名称完全一致。比方如下Json字符串:

{    "userId":3,    "userName":"张三"}

对应的Java实体类为:

//只能解析 userId、userNamepublic final class UserInfo {    public int userId;    public String userName;}

二、将Json字段映射到不同名的Java字段上

如上的Java实体类,如果此时后盾返回的Json字符串字段发生变化:

{    "USER_ID":4,    "USER_NAME":"李四"}

对应的前台也要批改Java实体类字段,随之而来的就是要批改View层的数据绑定了[大哭],为了防止一大推的批改,其实能够采纳将Json字段映射到不同名的Java字段上,给实体类的字段加上@SerializedName 注解:

//只能解析 USER_ID、USER_NAMEpublic final class UserInfo {    @SerializedName("USER_ID")    public int userId;    @SerializedName("USER_NAME")    public String userName;}

然而留神,此时该实体类只能解析 USER_ID、USER_NAME 字段,不能再解析 userId、userName 字段了。

三、将多个Json字段映射到单个Java字段

如上所述,如果咱们在不扭转实体类字段的状况下,既想解析 USER_ID、USER_NAME 字段,还需解析 userId、userName 字段。此时则需批改实体类的字段注解,在 @SerializedName 注解中应用值和备用参数:

//能够解析 userId、userName;USER_ID、USER_NAMEpublic final class UserInfo {    @SerializedName(value = "userId", alternate = "USER_ID")    public int userId;    @SerializedName(value = "userName", alternate = "USER_NAME")    public String userName;}

此时的实例类就既可解析 USER_ID、USER_NAME 字段,也可解析 userId、userName 字段了。

更近一步:

再来如下的Json字符串:

{    "ID":5,    "NAME":"王五"}

如果还想采纳原实体类进行解析,则需将 @SerializedName 注解中的备用参数批改为字符串数组,如下:

//能够解析 userId、userName;USER_ID、USER_NAME;ID、NAMEpublic final class UserInfo {    @SerializedName(value = "userId", alternate = {"USER_ID", "ID"})    public int userId;    @SerializedName(value = "userName", alternate = {"USER_NAME", "NAME"})    public String userName;}

此时的实例类就能够解析 userId、userName;USER_ID、USER_NAME;ID、NAME了。

四、总结:

应用如下带有 @SerializedName 注解,注解中应用了值和备用参数,且备用参数为字符串数组 的实体类:

//能够解析 userId、userName;USER_ID、USER_NAME;ID、NAMEpublic final class UserInfo {    @SerializedName(value = "userId", alternate = {"USER_ID", "ID"})    public int userId;    @SerializedName(value = "userName", alternate = {"USER_NAME", "NAME"})    public String userName;}

能够同时解析如下三种字段的Json:

String json1 = "{\"userId\":3,\"userName\":\"张三\"}";String json2 = "{\"USER_ID\":4,\"USER_NAME\":\"李四\"}";String json3 = "{\"ID\":5,\"NAME\":\"王五\"}";

格式化Json如下:

{    "userId":3,    "userName":"张三"} {    "USER_ID":4,    "USER_NAME":"李四"} {    "ID":5,    "NAME":"王五"}