2017-06-30 100 views
0

我想使用gson解析Json。 但GSON不分析具體jsonProperty到自定義字段下面 是一個例子:Gson如何解析自定義字段

`json String : { "SONUMBER": "PSO1706000006 "}` 

Java類

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變量中的空值

我想將解析的json值放入Item.SONUMBER中。

我應該如何實現這一點有任何替代可用?

回答

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(); 
+0

感謝名單兄弟,你解決了我的問題 – user3481301