解析时,Unity 2018展示中的Json To Array展示

时间:2018-08-23 11:00:09

标签: c# unity3d

我正在使用JsonHelper(https://stackoverflow.com/a/36244111)并将其全部设置在我的程序中

UserInfo.cs

[Serializable]
public class UserInfo : MonoBehaviour {
    public string number;
    public string name;
}

当我打电话给UserInfo[] list = JsonHelper.FromJson<UserInfo>(www.downloadHandler.text);时,我看到了

  

ArgumentException:JSON必须表示一个对象类型。

请帮助我。 杰森 [{"number":0,"name":"Bulbasaur"},{"number":1,"name":"Ivysaur"},{"number":2,"name":"Venusaur"},{"number":3,"name":"Charmander"},{"number":4,"name":"Charmeleon"},{"number":5,"name":"Charizard"},{"number":6,"name":"Squirtle"}]

1 个答案:

答案 0 :(得分:1)

如果您正在使用下面的包装器类...

using UnityEngine;
using System;

public static class JsonHelper
{
    public static T[] FromJson<T>(string json)
    {
        Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
        return wrapper.Items;
    }

    public static string ToJson<T>(T[] array, bool prettyPrint = false)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return JsonUtility.ToJson(wrapper, prettyPrint);
    }

    [Serializable]
    private class Wrapper<T>
    {
        public T[] Items;
    }
}

然后像这样使用它:

string JSONToParse = "{\"Items\":" + www.downloadHandler.text + "}";
UserInfo[] list = JsonHelper.FromJson<UserInfo>(JSONToParse);

为什么?

"{\"Items\":" 

必须与Array变量的名称匹配

public T[] Items;

编辑:

发现了您的问题。 删除“ MonoBehaviour”作为对UserInfo的继承。那应该解决它。序列化程序无法序列化从monobehaviour,component,scriptableobject等继承的类。只有普通类(模型)可以工作。

[Serializable]
public class UserInfo 
{
    public string number;
    public string name;
}