[英]json.net, how do I deserialize json object from relative path or actual json object
有人可以告訴我如何使用另一個 json 文件的路徑或 json 對象來反序列化 json 對象嗎?
我正在嘗試制作一個完全由配置文件構成的游戲。
基本上我會選擇這兩個......
{
"LevelConfig" : {
"SkillGain" : 0.01,
"MagicGain" : 0.01,
"XpScale" : 50.0,
"HpScale" : 0.01,
"MpScale" : 0.01
}
}
or
{
"LevelConfig" : "../Level.level" (only returns json object if file exists else it tries to return string)
}
並將它們轉換成這些
public class JLevel
{
public float SkillGain { get; set; }
public float MagicGain { get; set; }
public float XpScale { get; set; }
public float HpScale { get; set; }
public float MpScale { get; set; }
}
public class JEntity
{
public string Name { get; set; }
public int Hp { get; set; }
public int Mp { get; set; }
public int Xp { get; set; }
public JLevel LevelConfig { get; set; }
public JColor ColorConfig { get; set; }
public JPhysics PhysicsConfig { get; set; }
}
class Entity
{
public Entity Load(string filename)
{
return ???;
}
public void Save(string filename)
{
???;
}
}
現在我知道我可以只使用JsonConvert.DeserializeObject()
但這不會檢查 json 路徑。
首先你需要為這個 Json 對象創建一個類
類的名稱應與JSON中的對象名稱相同
{
"LevelConfig" : {
"SkillGain" : 0.01,
"MagicGain" : 0.01,
"XpScale" : 50.0,
"HpScale" : 0.01,
"MpScale" : 0.01
}
}
public class LevelConfig
{
public double SkillGain { get; set; }
public double MagicGain { get; set; }
public double XpScale { get; set; }
public double HpScale { get; set; }
public double MpScale { get; set; }
}
public class Example
{
public LevelConfig LevelConfig { get; set; }
}
那么你需要使用Newtonsoft對其進行脫鹽處理
JsonConvert.DeserializeObject<Example>(Json);
Json 應該是一個字符串。 如果它是一個對象,你需要在
JsonConvert.DeserializeObject<Example>(JsonConvert.SerializeObject(Json));
class Program
{
public static void Main()
{
var str = "{ LevelConfig : \"level.json\"}";
var levelConfigs = JsonConvert.DeserializeObject<LevelConfigs>(str);
var fileTxt = GetFileText(levelConfigs.LevelConfig);
JLevel level = JsonConvert.DeserializeObject<JLevel>(fileTxt);
Console.WriteLine(level.HpScale);
Console.ReadLine();
}
private static string GetFileText(string jsonFile)
{
return File.ReadAllText(jsonFile);
}
}
public class LevelConfigs
{
public string LevelConfig { get; set; }
}
public class JLevel
{
public float SkillGain { get; set; }
public float MagicGain { get; set; }
public float XpScale { get; set; }
public float HpScale { get; set; }
public float MpScale { get; set; }
}
public class JEntity
{
public string Name { get; set; }
public int Hp { get; set; }
public int Mp { get; set; }
public int Xp { get; set; }
public JLevel LevelConfig { get; set; }
}
您可以根據需要更改 GetFileText 的實現
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.