【发布时间】:2021-07-14 15:30:30
【问题描述】:
我无法在 Unity 中解析 JSON。这是 JSON 文件:
{
"play_classic": [
{ "english": "PLAY CLASSIC" },
{ "spanish": "JUEGO CLÁSICO" },
{ "portuguese": "JUEGO CLÁSICO" },
{ "russian": "IGRAT' V KLASSICHESKUYU" }
]
}
结构和代码如下所示:
[System.Serializable]
class Root
{
public List<PlayClassicData> play_classic { get; set; }
}
[System.Serializable]
class PlayClassicData
{
public string english { get; set; }
public string spanish { get; set; }
public string portuguese { get; set; }
public string russian { get; set; }
}
实现如下所示:
ParseJson类:
public void Deserialize()
{
string path = Application.dataPath + "path...";
using (StreamReader r = new StreamReader(path))
{
string json = r.ReadToEnd();
Root classic = JsonUtility.FromJson<Root>(json);
//Root classic = JsonConvert.DeserializeObject<Root>(json);
Debug.Log("english:" + classic.play_classic[0].english);
Debug.Log("spanish:" + classic.play_classic[0].spanish);
}
}
代码抛出错误:
NullReferenceException: Object reference not set to an instance of an object
Assets.Scripts.Infastructure.PARSER.ParseJson.Deserialize () (at Assets/Scripts/Infastructure/PARSER/ParseJson.cs:23)
【问题讨论】:
-
我没有添加整个代码。
-
您可能不想在这里使用内置的
JsonUtility,而是使用例如Newtonsoft .NET JSON-> 它支持(de)serialization of Dictionary,因此您实际上可以拥有public Dictionary<string, string> play_classic = new Dictionary<string, string>();,并且可以轻松地在您的JSON文件中动态扩展它... -
另外 JsonUtility 不支持属性 .. 你想通过删除所有
{get; set}来使用字段