Json解串器似乎不起作用

时间:2015-11-10 16:49:20

标签: c# json

我做了一些代码,使用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; }
}

等等。

Hovever,写在这篇文章顶部的populate函数返回一个空对象。为什么会这样?

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

2 个答案:

答案 0 :(得分:1)

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

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) 
    {
        // ...
    }
}

答案 1 :(得分:0)

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

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