2017-06-30 22 views
0

gsonを使用してJsonを解析します。 しかし、カスタムフィールド以下 に特定jsonProperty解析されていないgsonは一例です: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変数のnull

解析されたjson値をItem.sONUMBERに入れたい。

これを達成するにはどうすればよいですか?

あなたは、このようなカスタム型デシリアライザを書く

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オブジェクトを作成することができます。このため

答えて

1

それは動作します、

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(BindableString.class, new BindableStringDeserializer()); 
Gson gson = gsonBuilder.create(); 
+0

ありがとう仲間、あなたは私の問題を解決しました – user3481301

関連する問題