Пусть у меня есть JSON-файл, как это:Сохранить имя объекта в переменную экземпляра во время GSON Десериализация
{
"ObjectName1": {
"enabled": true,
"SSOIDS": []
},
"ObjectName2": {
"enabled": true,
"SSOIDS": []
},
"ObjectName3": {
"enabled": true,
"SSOIDS": []
},
"ObjectName4": {
"enabled": true,
"IDs": []
}
}
Я хочу derserialize данные и сохранить «ObjectNameX» в поле, Objectname, мой 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 во время выполнения только то есть ключевые пары значений полого Objet доступны. Я знаю, что GSON десериализует правильные значения и имеет доступ к объектуNameX от отладчика eclipse.
Вот как я называю 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 в каждом уникальном объекте, который я десериализации ??