C# net,如何从相对路径或实际json对象反序列化json对象
有人能告诉我如何使用另一个json文件的路径或json对象反序列化json对象吗 我试图制作一个完全由配置文件构成的游戏 基本上我会选择这两个C# net,如何从相对路径或实际json对象反序列化json对象,c#,json,deserialization,C#,Json,Deserialization,有人能告诉我如何使用另一个json文件的路径或json对象反序列化json对象吗 我试图制作一个完全由配置文件构成的游戏 基本上我会选择这两个 { "LevelConfig" : { "SkillGain" : 0.01, "MagicGain" : 0.01, "XpScale" : 50.0, "HpScale" : 0.01, "MpScale" : 0.01 } } or {
{
"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中的对象名称相同
然后你需要用盐水淡化
JsonConvert.DeserializeObject(Json);
Json应该是一个字符串。如果它是一个对象,你需要在上面使用它
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(Json));
课程计划
{
公共静态void Main()
{
var str=“{LevelConfig:\”level.json\“}”;
var levelConfigs=JsonConvert.DeserializeObject(str);
var fileTxt=GetFileText(levelConfigs.LevelConfig);
JLevel-level=JsonConvert.DeserializeObject(fileTxt);
控制台写入线(级别HpScale);
Console.ReadLine();
}
私有静态字符串GetFileText(字符串jsonFile)
{
返回File.ReadAllText(jsonFile);
}
}
公共类级别配置
{
公共字符串LevelConfig{get;set;}
}
公共类JLevel
{
公共浮点技能增益{get;set;}
公共浮点MagicGain{get;set;}
公共浮点数{get;set;}
公共浮点HpScale{get;set;}
公共浮点MpScale{get;set;}
}
公营班
{
公共字符串名称{get;set;}
公共int Hp{get;set;}
公共int Mp{get;set;}
公共int Xp{get;set;}
公共jlevellevelconfig{get;set;}
}
您可以根据自己的需要更改GetFileText的实现可能重复的its不是关于反序列化json its如何以接受字符串路径作为对象的方式对其进行反序列化。
File.ReadAllText
可能是您想要的。这会起作用,但我更倾向于自定义反序列化程序。该方法需要我搜索itI,我已经知道这一点,但如果键“LevelConfig”是另一个json文件的路径,那么我认为这不起作用。您的json对象嵌套在该对象中。。你需要在另一个类中创建一个类。我做了一个名为JLevelI的工作。我已经修改了答案哦,好的,我明白你所说的“类的名称应该与JSON中的对象名称相同”是什么意思了。但我仍然不明白“JsonConvert.DeserializeObject(JsonConvert.SerializeObject(Json));”修复了我的问题。我有办法做到这一点,这样我就可以简单地调用反序列化函数并反序列化整个对象,包括嵌套的LevelConfig?您需要根据需要创建自定义jsonconverter,但我不确定如何处理此问题。”对于我需要做的事情,我的示例不是很好。有没有一种方法可以在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; }
}
JsonConvert.DeserializeObject<Example>(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; }
}