今日は初めてGSONを使用しています。今、私は値を持つクラスを非直列化してシリアライズしようとしています。 Deserialiseは完璧に動作しますが、ロードするとすべてのフィールドがnullとして出力されます。私は本当に何が間違っているのか、なぜそれがうまくいかないのかを知りたいです。GSONはすべてのフィールドをヌルに設定します
クラス充填する:
public class PlayerData {
private static Map<UUID, PlayerData> playerDataMap = new HashMap<UUID, PlayerData>();
public UUID uuid;
public Integer kills;
public Integer level;
public Integer xp;
public SkillType skillType;
public PlayerData() {
playerDataMap.put(getUUID(), this);
String logString = "[DEBUG] " + uuid + " " + skillType + " " + level;
ZombieSurvival.getInstance().getLogger().info(logString);
}
}
保存コード:
private synchronized void savePlayerData(){
try {
Map<UUID, PlayerData> map = PlayerData.getPlayerDataMap();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String seperator = File.separator;
String path = getDataFolder().getAbsolutePath() + seperator + "PlayerData" + seperator;
File folder = new File(path);
folder.mkdirs();
for(UUID uuid : map.keySet()){
PlayerData pd = map.get(uuid);
String json = gson.toJson(pd);
File myFile = new File(folder,uuid.toString() + ".json");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut);
myOutWriter.append(json);
myOutWriter.close();
fOut.close();
}
} catch (Exception e){
e.printStackTrace();
}
}
INFO:JSONコンテンツは、この方法で作成されました!
ロードコード:コンテンツ
private void loadPlayerData() {
try {
//Setup GSON Loading
String seperator = File.separator;
File invasionMobFolder = new File(getDataFolder() + seperator + "PlayerData" + seperator);
invasionMobFolder.mkdirs();
File[] listOfFiles = invasionMobFolder.listFiles();
for (File file : listOfFiles) {
if (file.getName().endsWith(".json")) {
FileInputStream fIn = new FileInputStream(file);
BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
String aDataRow = "";
String aBuffer = ""; //Holds the text
while ((aDataRow = myReader.readLine()) != null) {
aBuffer += aDataRow;
}
myReader.close();
Gson gson = new Gson();
gson.fromJson(aBuffer, PlayerData.class);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
JSON:
{
"uuid": "ba79c71f-aa2c-4f8b-a7e5-d6bfea7a4dcc",
"kills": 0,
"level": 0,
"xp": 0,
"skillType": "KNIGHT"
}
メソッドは、逆シリアル化されたオブジェクトでは何も行いません。だから、どういう意味でヌルですか?また、https://google.github.io/gson/apidocs/com/google/gson/Gson.html#fromJson-java.io.Reader-java.lang.Class- –
こちらをご覧ください。ファイルを読み込んでgsonにjson Stringを渡し、変数に値を渡すことができます。まあすべてがnullです。 UUIDはnull、skillTypeはnull、レベルはnullです。それらのオブジェクトが.jsonファイルに存在することがわかります。 jsonファイルの内容を作成した保存も機能します。 – FurtherV