这是我的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
中的JsonHelper
是null
。
我直接从以下位置复制了代码:
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/
我在做什么错了?
答案 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;
名称空间。
输出:(来自调试器)
警告::使用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
(请记住默认的序列化对性能有好处)。