gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名
2024-10-21 09:42:16
gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名
package com.example.core.mydemo.TypeAdapter; import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName; import java.lang.reflect.Field; /**
* 打印输出结果:
jsonStr={"Result":null,"id":1,"data":null}
bean=result:null id:1 data:null
bean2=result:-1 id:1 data:null
jsonStr2={"Result":-1,"id":1,"DATA":"Empty"}
*/
public class UserBean {
@SerializedName("Result")
public Integer result;
public Long id;
public String data; @Override
public String toString() {
return "result:"+result+" id:"+id+" data:"+data;
} public static void main(String[] args) {
// Gson gson = new Gson();
//serializeNulls输出null
Gson gson = new GsonBuilder().serializeNulls().create();
UserBean userBean = new UserBean();
userBean.setId(1);
// userBean.setData(null);
// userBean.setResult(null); String jsonStr = gson.toJson(userBean);
System.out.println("jsonStr=" + jsonStr);
UserBean bean = gson.fromJson(jsonStr,UserBean.class);
System.out.println("bean=" + bean.toString()); Gson gson2 = new GsonBuilder()
.registerTypeAdapter(String.class,new StringAdapter())
.registerTypeAdapter(Integer.class,new IntegerAdapter())
.registerTypeAdapter(int.class,new IntegerAdapter())
.setFieldNamingStrategy(new FirstLowerCaseStrategy())
.create(); UserBean bean2 = gson2.fromJson(jsonStr,UserBean.class);
System.out.println("bean2=" + bean2.toString()); System.out.println("jsonStr2=" + gson2.toJson(bean2)); } public int getResult() {
return result;
} public void setResult(Integer result) {
this.result = result;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getData() {
return data;
} public void setData(String data) {
this.data = data;
} public static class FirstLowerCaseStrategy implements FieldNamingStrategy { @Override
public String translateName(Field f) {
// System.out.println("name=" + f.getName());
if("data".equalsIgnoreCase(f.getName())){
// return f.getName().toLowerCase();
// System.out.println("upper=" + f.getName().toUpperCase());
return f.getName().toUpperCase();
}else{
return f.getName();
}
}
} }
最新文章
- Table样式
- qt中添加Q_OBJECT报错的问题
- f2fs解析(三)NAT中如何区分inode和其他dnode
- 九度OJ 1453 Greedy Tino -- 动态规划
- 动态改变数据库连接 in Entity Framework 5
- Ajax简单应用-购物车
- Python 命令行非阻塞输入
- asp.net能不托管吗?
- uva 280 - Vertex
- JSP的include指令
- CSS中margin和position:relative的定位问题
- iOS视频编辑SDK
- js中的事件委托详解
- win8在安装office visio2003出现“请求的操作需要提升”,解决方法
- iOS模拟器:Undefined symbols for architecture x86_64
- dedecms自增标签[field:global.autoindex/]的运用
- RegExp正则表达式——更深层次解析
- iOS逆向+越狱
- 转 UIActivityIndicatorView、UIProgressView 活动与进度指示器-IOS开发
- python常用模块之configparser模块