我做了一些代码,使用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文件示例,因为我不确定我应该显示它^^
答案 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.PopulateObject
。 JsonConvert.PopulateObject
用于使用JSON中的值填充现有对象实例。
string json = File.ReadAllText("jsontest");
var levelsConfig = JsonConvert.DeserializeObject<List<LevelsConfig>>(json);