1.Gson普通解析一般情况下,当我们使用Gson将Json字符串解析为Java实体数据类时,Json字段和Java字段一一对应,名字完全一样。比如下面的Json字符串:{"userId":3,"userName":"张三"}对应Java实体类://只解析userId,userNamepublicfinalclassUserInfo{publicintuserId;publicStringuserName;}2.将Json字段映射到Java字段上面的Java实体类中,名称不同。如果此时后台返回的Json字符串字段发生变化:{"USER_ID":4,"USER_NAME":"Lisi"}对应前台还需要修改Java实体类字段,接着修改数据绑定View层的[哭],为了避免大量的修改,其实可以使用Json字段映射成Java字段的不同名称上面,在该字段上添加@SerializedName注解entityclass://只解析USER_ID,USER_NAMEpublicfinalclassUserInfo{@SerializedName("USER_ID")publicintuserId;@SerializedName("USER_NAME")publicStringuserName;}但是注意,此时实体类只能解析USER_ID和USER_NAME字段,不能再解析userId和userName字段了。3.将多个Json字段映射到一个Java字段上面说了,如果我们要解析USER_ID、USER_NAME字段,还需要在不改变实体类字段的情况下解析userId和userName字段。这时候需要修改实体类的字段注解,在@SerializedName注解中使用value和alternate参数://canparseuserId,userName;USER_ID,USER_NAMEpublicfinalclassUserInfo{@SerializedName(value="userId",alternate="USER_ID")publicintuserId;@SerializedName(value="userName",alternate="USER_NAME")publicStringuserName;}这时候实例类可以解析USER_ID和USER_NAME的字段,以及userId和userName的字段。更进一步:这里是如下的Json字符串:{"ID":5,"NAME":"WangWu"}如果还想使用原来的实体类进行解析,需要修改@中的备用参数SerializedName注解为字符String数组,如下://可以解析userId,userName;USER_ID,USER_NAME;ID,NAMEpublicfinalclassUserInfo{@SerializedName(value="userId",alternate={"USER_ID","ID"})publicintuserId;@SerializedName(value="userName",alternate={"USER_NAME","NAME"})publicStringuserName;}这时候实例类可以解析userId,userName;USER_ID,USER_NAME;身份证,姓名。4.小结:使用下面带@SerializedName注解的实体类,使用值和备用参数,备用参数为字符串数组://可以解析userId,userName;USER_ID,USER_NAME;ID,NAMEpublicfinalclassUserInfo{@SerializedName(value="userId",alternate={"USER_ID","ID"})publicintuserId;@SerializedName(value="userName",alternate={"USER_NAME","NAME"})publicStringuserName;}可以同时解析以下三个字段的Json:Stringjson1="{\"userId\":3,\"userName\":\"张三\"}";Stringjson2="{\"USER_ID\":4,\"USER_NAME\":\"李四\"}";Stringjson3="{\"ID\":5,\"NAME\":\"王舞\"}";格式化Json如下:{"userId":3,"userName":"张三"}{"USER_ID":4,"USER_NAME":"李四"}{"ID":5,"NAME":"王舞"}
