簡體   English   中英

如何從 JSON 文件獲取值到 C# 列表以在 Unity 中使用?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM