Gson添加适配器来解析多个数据类型.在工作的场景中,有很多序列化和反序列化的操作,但是总是要碰到很多数据格式的问题.
此时就要添加相应的适配器,来匹配各种数据类型.
gsonbuilder 可以通过registerTypeAdapterFactory() 方法来添加适配器.
Gson 可以通过以下方式来获取
Gson gson=new GsonBuilder().registerTypeAdapterFactory(new MoreAdapterFactory<>()).create();
这个 MoreAdapterFactory 需要实现 TypeAdapterFactory 这个接口.
import java.util.Date;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
public class MoreAdapterFactory<T> implements TypeAdapterFactory {
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<T> rawType = (Class<T>) type.getRawType();
if (rawType == Date.class) {
return (TypeAdapter<T>) new DateNullAdapter();
}else if(rawType==String.class) {
return (TypeAdapter<T>) new BlankStringToNullAdapter();
}
return null;
}
}
在这里匹配各种数据类型.
然后针对具体数据格式的处理,需要自己写各种adpter,
比如,写这个
BlankStringToNullAdapter.class
import java.io.IOException;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import com.zxtc.common.utils.StringUtils;
public class BlankStringToNullAdapter extends TypeAdapter<String>{
@Override
public void write(JsonWriter out, String value) throws IOException {
// TODO Auto-generated method stub
if (value == null) {
out.nullValue();
return;
}
out.value(value);
}
@Override
public String read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return null;
}
String jsonStr = in.nextString();
if(StringUtils.isBlank(jsonStr)) {
return null;
}else {
return jsonStr;
}
}
}
其他的数据处理,同样实现
TypeAdapter
接口即可.