试图在Unity C#中解析JSON数组,但返回null
这是我的JSON文件:试图在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
[
{
"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数组多年来一直是多次安全漏洞攻击的目标,您不想养成以任何方式使用它们的习惯。