试图在Unity C#中解析JSON数组,但返回null

试图在Unity C#中解析JSON数组,但返回null,c#,json,unity3d,jsonparser,C#,Json,Unity3d,Jsonparser,这是我的JSON文件: [ { "name": "An item" } ] 这是我的助手类: public static class JsonHelper { public static T[] FromJson<T>(string json) { string newJson = "{ \"array\": " + json + "}"; Wrapper<T> w

这是我的JSON文件:

[
  {
    "name": "An item"
  }
 ]
这是我的助手类:

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;
        }
    }
Item[] itemList = JsonHelper.FromJson<Item>(itemJson.text);
这就是我调用helper类的地方:

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;
        }
    }
Item[] itemList = JsonHelper.FromJson<Item>(itemJson.text);
Item[]itemList=JsonHelper.FromJson(itemJson.text);
问题是
JsonHelper
中的
itemList
wrapper.array
null

我直接从以下位置复制了代码:


我做错了什么?

我建议您在package manager控制台中使用下面的命令安装
json.net
NuGet package for Unity

Install-Package Unity.Newtonsoft.Json -Version 7.0.0
然后,无需修改大部分代码,就可以让它正常工作

只需将您的
JsonHelper
类替换为以下内容

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;
    }
}
公共静态类JsonHelper
{
公共静态T[]FromJson(字符串json)
{
字符串newJson=“{\“array\”:“+json+”}”;
JToken JToken=JToken.Parse(newJson);
包装器=jToken.ToObject();
返回wrapper.array;
}
[系统可序列化]
私有类包装器
{
公共T[]数组;
}
}
您需要使用Newtonsoft.Json.Linq添加
命名空间到您的程序

输出:(来自调试器)


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

谢谢,它能起作用。但是,在我的代码中使用Unity的官方JSON库有什么问题?在你的问题中,我看不出你的代码有什么问题,但Unity JSON库有点不足,这一点很明显,因为它无法支持顶级数组。@HenryZhang,我认为Lasse Vågsæther Karlsen的上述评论是正确的,因为你的JSON是顶级数组。如果我的答案是help you,那么在答案的左侧打勾,使其变为绿色,并进行投票:)内置json实用程序也不能做其他事情,例如自定义转换器,这样您就可以以非标准方式序列化内容。比如说,在Minecraft中,我想将世界保存为块。我不想在每个位置对整个
类进行编码!我只想编码一个我可以在反序列化过程中查找的引用。比如说,
“block_stone”
1
。需要注意的是,在WebGL项目中使用Newtonsoft.Json不起作用。Unity的Json实现不支持未包装的顶级数组。考虑到顶级JSON数组多年来一直是多次安全漏洞攻击的目标,您不想养成以任何方式使用它们的习惯。