【问题标题】:Json To Array exeption in Unity 2018 exeption when parse [duplicate]解析器时Unity 2018异常中的Json To Array异常[重复]
【发布时间】:2018-08-23 11:00:08
【问题描述】:

我正在使用 JsonHelper (https://stackoverflow.com/a/36244111) 并在我的程序中设置所有内容

用户信息.cs

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

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

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

请帮助我。 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"}]

【问题讨论】:

  • 我猜这就是答案:stackoverflow.com/a/43233724。如果没有,您能否向我们展示您尝试反序列化的 JSON? (即,请在问题中编辑一个示例)
  • 我正在编辑。添加json
  • 查看 dup 中的示例类。它不继承自 MonoBehaviour。你不能那样做。

标签: c# unity3d


【解决方案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\":" 

必须与数组变量的名称匹配

public T[] Items;

编辑:

发现你的问题。 删除“MonoBehaviour”作为继承自 UserInfo。那应该解决它。序列化程序无法序列化从单一行为、组件、脚本对象等继承的类。只有普通类(模型)有效。

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

【讨论】:

  • 我正在尝试但不工作我有 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"}] 并尝试先返回但统一说 null ((
  • 您能否发布其余代码,其中包含对 JsonHelper 的调用?
  • 您是否通过调用 Debug.Log(www.downloadHandler.text) 验证是否收到了响应?
  • 是的,我是支票。他加载[{"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"}]
  • 查看我对解决方案的最新编辑
猜你喜欢
  • 1970-01-01
  • 2012-10-19
  • 2012-08-12
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
相关资源
最近更新 更多