尝试在 Unity C# 中解析 JSON 数组,但它 returns null

Trying to parse a JSON array in Unity C# but it returns null

这是我的 JSON 文件:

[
  {
    "name": "An item"
  }
 ]

这是我的帮手class:

public static class JsonHelper
    {
        public static T[] FromJson<T>(string json)
        {
            string newJson = "{ \"array\": " + json + "}";
            Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson);
            return wrapper.array;
        }

        [System.Serializable]
        private class Wrapper<T>
        {
            public T[] array;
        }
    }

这是 class 我正在尝试用以下材料制作对象:

public class Item
{   
    public string name, desc;
}

这是我调用助手的地方class:

Item[] itemList = JsonHelper.FromJson<Item>(itemJson.text);

问题是 itemListJsonHelper 中的 wrapper.arraynull

我直接复制了代码:

http://www.boxheadproductions.com.au/deserializing-top-level-arrays-in-json-with-unity/

https://forum.unity.com/threads/how-to-load-an-array-with-jsonutility.375735/

我做错了什么?

我建议您在包管理器控制台中使用以下命令为 Unity 安装 json.net NuGet 包

Install-Package Unity.Newtonsoft.Json -Version 7.0.0

然后无需修改太多代码,您就可以让它工作

只需将您的 JsonHelper class 替换为以下

public static class JsonHelper
{
    public static T[] FromJson<T>(string json)
    {
        string newJson = "{ \"array\": " + json + "}";
        JToken jToken = JToken.Parse(newJson);
        Wrapper<T> wrapper = jToken.ToObject<Wrapper<T>>();
        return wrapper.array;
    }

    [System.Serializable]
    private class Wrapper<T>
    {
        public T[] array;
    }
}

并且您需要将 using Newtonsoft.Json.Linq; 命名空间添加到您的程序中。

输出:(来自调试器)

注意: 使用 Newtonsoft.Json 在 WebGL 项目中不起作用。