Gson如何解析自定义字段

时间:2017-06-30 11:55:09

标签: java android gson android-databinding

我希望使用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。

我应该如何实现这一目标?

1 个答案:

答案 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();