[英]How to get values from JSON file into C# List to use in Unity?
我正在做一些练习以从 JSON 文件中获取值并将这些值设置到 Unity 项目的 InputFields 中。
当我读取文件时,我所能得到的是索引超出范围,当计算列表中的元素时,它返回 0 个元素。
列表.json:
{
"personajes":[
{"nombre":"Pepe","apellido":"Lereie","puntos":15},
{"nombre":"David","apellido":"Garcia","puntos":99}
]
}
乌苏里奥斯 class
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Usuarios
{
public string nombre;
public string apellido;
public int puntos;
}
Personajes class
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Personajes
{
public List<Usuarios> personajes = new List<Usuarios>();
}
Controller 来自 Unity 的脚本
using System.Collections;
using System.Collections.Generic;
using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class MenuController : MonoBehaviour
{
public TMP_InputField entradaNombre, entradaApellidos, entradaPuntos;
string fichero;
string datos;
Personajes lista;
void Awake()
{
fichero = Application.dataPath + "/Files/lista.json";
datos = File.ReadAllText(fichero);
lista = JsonUtility.FromJson<Personajes>(datos);
Debug.log(lista[0].nombre);
}
}
在这种情况下,控制台 output 应该是“Pepe”,但我唯一得到的是索引超出范围。
更新:
还尝试了 Serge 的解决方案并获得相同的 output。
Debug.log(lista.personajes[0].nombre);
反序列化后,你有一个 object,而不是列表。 所以试试这个
lista = JsonUtility.FromJson<Personajes>(datos);
Debug.log(lista.personajes[0].nombre);
恕我直言,这会更清楚
List<Usuarios> personages = JsonUtility.FromJson<Personajes>(datos).personages;
Debug.log(personajes[0].nombre);
并从 class 中删除列表 init
public class Personajes
{
public List<Usuarios> personajes;
}
如果您仍然有问题,我强烈建议您为 Unity3d 安装 Newtonsoft.Json(您可以谷歌找到它),并使用此代码
List<Usuarios> personajes = JsonConvert.DeserializeObject<Personajes>(json).personajes;
Debug.log(personajes[0].nombre);
如此接近,但看起来您也忘记了用[System.Serializable]
装饰Usuarios
:
[System.Serializable]
public class Usuarios
{
public string nombre;
public string apellido;
public int puntos;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.