我希望使用gson解析Json。 但是gson没有将特定的jsonProperty解析为自定义字段 下面是一个例子:
`json String : { "SONUMBER": "PSO1706000006 "}`
java class
public class Item {
@SerializedName("SONUMBER")
@Expose
public BindableString sONUMBER;
}
BindableString.java类
public class BindableString extends BaseObservable {
private String value = "";
public String get() {
return !value.isEmpty() ? value : "";
}
public void set(String value) {
if (!Objects.equals(this.value, value)) {
this.value = value;
notifyChange();
}
}
public boolean isEmpty() {
return value == null || value.isEmpty();
}
@Override
public String toString() {
return value;
}
@BindingConversion
public static String bindableString(BindableString bindableString) {
if (bindableString != null) {
return bindableString.value;
} else {
return null;
}
}
}
但是当我解析json时,我在Item.sONUMBER变量中得到null
我希望将解析后的json值转换为Item.sONUMBER。
我应该如何实现这一目标?
答案 0 :(得分:1)
为此你可以编写这样的自定义类型反序列化器,
import java.lang.reflect.Type;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class BindableStringDeserializer implements JsonDeserializer<BindableString> {
@Override
public BindableString deserialize(JsonElement json, Type arg1,
JsonDeserializationContext arg2) throws JsonParseException {
BindableString bindableString = new BindableString();
bindableString.set(json.getAsString());
return bindableString;
}
}
并创建一个像这样的Gson对象然后它将起作用,
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(BindableString.class, new BindableStringDeserializer());
Gson gson = gsonBuilder.create();