繁体   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