如何将JSON字符串作为数组传递

ehxuflar  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(314)
[
    {"id": 1, "name": "danny_devito", "img": "/images/1"},
    {"id": 2, "name": "jim_carey", "img": "/images/2"},
    {"id": 3, "name": "tyler_1", "img": "/images/3"}
]
[System.Serializable]
    public class Players {
        public int id;
        public string name;
        public string img;
    }

    [System.Serializable]
    public class PlayersArray {
        public Players[] playersData;
    }
string playersJson = File.ReadAllText(Application.dataPath + "/playersFile.json");
        PlayersArray loadedPlayerData = (PlayersArray)JsonUtility.FromJson<PlayersArray>(playersJson);

        Debug.Log("Danny Boy: " + loadedPlayerData.playersData[0].name);

跟随了大量的教程,但没有一个有效!请帮助
it gives me this error
我试了很多方法,都没用

w1e3prcc

w1e3prcc1#

你试图反序列化一个对象,但是你显示的JSON不是一个对象,而是一个数组,把它反序列化成一个集合:

var loadedPlayerData = JsonUtility.FromJson<List<Players>>(playersJson);

或者甚至只是一个数组:

var loadedPlayerData = JsonUtility.FromJson<Players[]>(playersJson);

顺便说一句...名字很重要。Players是一个误导 a player 的名字。这个类应该被称为Player
此外,这个类 * 可能 * 根本不反序列化,这取决于JSON序列化器的工作方式。它们倾向于使用 properties,而不是 fields。无论如何,你可能都想使用属性:

public class Players {
    public int id { get; set; }
    public string name { get; set; }
    public string img { get; set; }
}

为了进一步的改进,你可能还想大写属性名称。JSON序列化器 * 可能 * 是区分大小写的(我不认为默认情况下它们是区分大小写的,但值得测试),你可能需要向属性添加属性来指定它们在JSON中的名称。但仅仅为了让代码 * 工作 *,至少你最有可能需要属性而不是字段。

相关问题