【发布时间】:2018-07-05 14:11:41
【问题描述】:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
string filename = "data.json";
string jsonString;
string path;
[System.Serializable]
public class LevelGrid
{
public string[] rows;
}
[System.Serializable]
public class Levels
{
public LevelGrid[] levels;
}
void LoadGrid()
{
// Load data
string path = Application.streamingAssetsPath + "/" + filename;
jsonString = File.ReadAllText(path);
var levelBricks = JsonUtility.FromJson<Levels>(jsonString);
// DOESNT WORK
Debug.Log(levelBricks.levels[0]);
}
我的 data.json 是:
{
"Levels": [
{"Level1": ["1,1,1,1,1", "1,1,1,1,1", "1,1,1,1,1"]},
{"Level2": ["1,1,1,1,1", "1,1,1,1,1", "1,0,1,0,1"]}
]
}
levelBricks int 有问题,没有从 json 正确加载。我究竟做错了什么? Debug.Log 给出一个错误,如果我只 Debug.Log “levelBricks”,我得到的只是“Levels”。我希望能够访问 Level1 和 Level2 中的数组。
【问题讨论】:
-
什么是
JsonUtility.FromJson? -
用 json.net 代替 JsonUtility 试试 newtonsoft.com/json
-
OP 正在使用 Unity,据我所知 JSON.NET 在 Unity 中不可用。除此之外,错误很明显。
Level1和Level2键是动态的,C# 类不反映... -
不确定 Unity,但您可以使用此类
public class Levels { public Dictionary<string, string[]>[] levels; }反序列化为 JSON.Net,这样可能会起作用。 -
话虽如此,如果我使用 JSON.Net,我可能会为动态属性使用自定义转换器。