[英]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.