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

时间:2019-03-06 07:08:39

标签: 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> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson);
            return wrapper.array;
        }

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

这是我要制作对象的类:

public class Item
{   
    public string name, desc;
}

这是我在调用帮助程序类的地方:

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

问题是itemList,而wrapper.array中的JsonHelpernull

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

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/

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

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

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;
    }
}

您需要在程序中添加using Newtonsoft.Json.Linq;名称空间。

输出:(来自调试器)

enter image description here

警告::使用Newtonsoft。Json在WebGL项目中不起作用。

答案 1 :(得分:0)

您可以在此处查看我的答案(最终编辑部分) Converting arrays of arrays to json

了解如何使用json unity默认库。

我现在不确定您的实现有什么问题,但是使用Unity实现时需要记住很多事情: -类结构中的变量需要使用与Json相同的名称(或需要指定注释)。 -您所有的类都需要System.Serializable,并且需要使用基本数组/列表创建json结构(您可以将多个类用于复杂类型)。 -您的变量需要getter / setter

我认为主要的问题是用于类变量的名称以及应该实现getter / setter的名称,并且还需要在Item类中使用System.Serializable,但是现在我无法测试所有内容。

PS。这是了解统一序列化规则的好文档: https://docs.unity3d.com/Manual/script-Serialization.html

(请记住默认的序列化对性能有好处)。