我創建了一個由用戶以給定名稱命名的檔案,并在其中添加一些統計資訊,例如:健康、功率、速度、庫存等。現在,我想創建一個從給定路徑獲取統計資訊的函式。它需要從給定的名稱中找到檔案并獲取統計資訊。
我嘗試將檔案重新讀取為 note/json 等,但效果不佳。我想得到像這樣的變數:if(inventory.Contains("Bread"))
注意:我嘗試將檔案保存為 .json,但它保存為未知注釋,我不知道如何以及為什么。
...
...
CharacterData Character = new CharacterData()
{
health = 100,
power = 100,
speed = 100,
dexterity = 100,
hungry = 100,
weapon = "Fist",
inventory = new List<string>()
{
"Bread"
}
};
string stringjson = JsonConvert.SerializeObject(Character);
File.WriteAllText(characterPath, stringjson);
}
public int GetCharInfo(string charName,string stat)
{
//return (stat value)
}
uj5u.com熱心網友回復:
你可以這樣做:
CharacterData Character = new CharacterData()
{
health = 100,
power = 100,
speed = 100,
dexterity = 100,
hungry = 100,
weapon = "Fist",
inventory = new List<string>()
{
"Bread"
}
};
string stringjson = JsonConvert.SerializeObject(Character);
string path = @"C:\DEV\StackOverflow\";
string characterPath = path "johnny.json";
File.WriteAllText(characterPath, stringjson);
public int GetCharInfo(string charName, string stat)
{
string json = File.ReadAllText(path $"{charName}.json");
JObject obj = JObject.Parse(json);
return (int)obj[stat];
}
現在如果你打電話:
GetCharInfo("johnny", "power")
你會得到價值:
100
此外,如果您想查看密鑰是否存在,您可以使用 JObject 上的 ContainsKey 方法,如下所示:
if(obj.ContainsKey(stat))
return (int)obj[stat];
更新
如果您想獲得不同型別的“統計資訊”,我建議您這樣做:
有這個方法將字符作為 json 物件
public JObject GetCharacterJSON(string charName){
string json = File.ReadAllText(path $"{charName}.json");
return JObject.Parse(json);
}
現在您可以將其加載到變數中
JObject johnny = GetCharacterJSON("johnny);
你可以像這樣獲得庫存屬性:
List<string> inventory = johnny["inventory"].ToObject<List<string>>();
作為一個建議,從我的角度來看,如果我是你,我會嘗試將 json 字串反序列化為 CharacterData 物件,然后像這樣使用它:
public CharacterData GetCharacterData(string charName){
string json = File.ReadAllText(path $"{charName}.json");
return JsonConvert.DeserializeObject<CharacterData>(json);
}
CharacterData characterData = GetCharacterData("johnny");
int power = characterData.power; //100
List<string> inventory = characterData.inventory; //["Bread"]
if(inventory.Contains("Bread"){
//do something
}
注意:我沒有在所有示例中考慮檔案不存在或屬性不存在等的錯誤處理。我只是概述了一般原則,以便于理解。
謝謝
uj5u.com熱心網友回復:
我想從 File.ReadAllText(path) 開始使用和檔案示例
https://docs.microsoft.com/en-us/dotnet/api/system.io.file.readalltext?view=net-6.0
然后您可以將結果轉換為 JSON 并提取您想要的資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460631.html
