0
假設我有一個JSON文件中像這樣:保存對象名稱到一個實例變量中GSON反序列
{
"ObjectName1": {
"enabled": true,
"SSOIDS": []
},
"ObjectName2": {
"enabled": true,
"SSOIDS": []
},
"ObjectName3": {
"enabled": true,
"SSOIDS": []
},
"ObjectName4": {
"enabled": true,
"IDs": []
}
}
我想derserialize數據和「ObjectNameX」存儲到一個領域,對象名,我的Java對象例如:
public class Feature implements Serializable {
private static final long serialVersionUID = 1L;
private String objectName;
private Boolean enabled;
private List<String> IDs;
private boolean checkLastTwoChars; //sometimes my json objects might have this
//element.However in this example it doesn't
//Getters and Setters left out for brevity
我看了一下就創建一個自定義解串器here 的d已經創建了以下類:
public class FeatureDeserializer implements JsonDeserializer<Feature> {
public Feature deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
Feature ft = new Feature();
if(!json.isJsonNull()){
ft.setFeatureName(json.getAsJsonObject().getAsString());
//json.getAsJsonObject().getAsString()--> `{"enabled":true,"SSOIDS":[],"checkLastTwoChars":false}
}
return ft;
}
}
但在解串器的JSON參數沒有在運行時即只有客體領域的鍵值對可訪問objectNameX。 我知道GSON反序列化了正確的值,並且可以從eclipse調試器訪問objectNameX。
以下是我打電話的fromJson():
// just the part I think is relevant
Map<String, Feature> featureCache = new HashMap<String, Feature>();
for(File file : files){
try {
BufferedReader br = new BufferedReader(new FileReader(file));
StringBuilder sb = new StringBuilder();
while(br.ready()){
sb.append(br.readLine());
}
br.close();
Gson gson = new GsonBuilder().setPrettyPrinting().
registerTypeAdapter(Feature.class, new FeatureDeserializer()).create();
featureCache = gson.fromJson(sb.toString(), new TypeToken<SortedMap<String, Feature>>(){}.getType()); // features in a specific file
是否有在每一個獨特的目標,我反序列化保存每個objectNamex一種標準的方式?