C# net,如何从相对路径或实际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 {

有人能告诉我如何使用另一个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中的对象名称相同

然后你需要用盐水淡化

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; }

}