Json反序列化程序似乎不起作用

本文关键字:不起作用 程序 反序列化 Json | 更新日期: 2023-09-27 18:21:27

我做了一些代码,使用json.Net将json文件反序列化为对象:

private void populate()
    {
        LevelsConfig RootObject = new LevelsConfig();
        string json = File.ReadAllText("jsontest");
        JsonConvert.PopulateObject(json, RootObject);
    }

LevelsConfig看起来是这样的:

public class LevelsConfig
{
    public List<DefinitionRoot> roots { get; set; }
}

下面有一堆类,每个类都代表json的"更深层次"部分,比如:

public class DefinitionRoot
{
    public string LevelName { get; set; }
    public int Difficulty { get; set; }
    public int StartingGold { get; set; }
    public int StartingLives { get; set; }
    public List<UndertimePart> UndertimeParts { get; set; }
    public List<Wave> Waves { get; set; }
}
public class Wave
{
    public string Name { get; set; }
    public double TimeBeforeStart { get; set; }
    public int GoldBrave { get; set; }
    public List<SubWave> SubWaves { get; set; }
}

等等

悬停时,本文顶部编写的populate函数返回一个空对象。为什么会发生这种情况?

编辑:我需要删除json文件示例,因为我不确定我应该显示它^^

Json反序列化程序似乎不起作用

您需要将JSON反序列化为一个对象,该对象的属性是名称为LevelsConfigLevelsConfig的集合。

private void populate()
{
    var obj = new {LevelsConfig = new List<LevelsConfig>() }   
    string json = File.ReadAllText("jsontest");
    JsonConvert.PopulateObject(json, obj);
    foreach (var config in obj.LevelsConfig) 
    {
        // ...
    }
}

您应该使用JsonConvert.DeserializeObject,而不是JsonConvert.PopulateObjectJsonConvert.PopulateObject用于用JSON中的值填充现有对象实例。

string json = File.ReadAllText("jsontest");
var levelsConfig = JsonConvert.DeserializeObject<List<LevelsConfig>>(json);