0

我正在使用LitJSON加载 .json 数据,并且正在使用 foreach 循环运行一些测试代码,但它不起作用。

InvalidOperationException: Instance of JsonData is not a dictionary
LitJson.JsonData.EnsureDictionary()

(运行 foreach 行时会抛出此错误)

    using UnityEngine;
    using LitJson;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;

    public void LoadData() {
        JsonReader reader = new JsonReader("[1, 2, 3, 4, 5]");
        JsonData data = JsonMapper.ToObject(reader);

        foreach (JsonData i in data) {
          Debug.Log("foreach: test");
        }
    }

根据文档中的示例(Ctrl+F“foreach”;它位于页面底部附近),我很确定这段代码应该可以工作(?)。

有人对为什么这不起作用有任何想法吗?建议将不胜感激!

编辑:解决方案是将数据转换为 IList 对象,如下所示:

foreach (JsonData i in data as IList) {
    Debug.Log("foreach: " + i)
}
4

1 回答 1

2

1foreach .不要在Unity中不是数组的任何东西上使用。它无情地分配内存。

2 .Unity 有一个内置的Json序列化称为JsonUtility. 我建议你用那个。它目前不支持数组,您的问题表明您正在使用Json数组。有一个解决方案可以让它与数组一起使用。看这里。从它说的地方阅读2. MULTIPLE DATA(ARRAY JSON)。一旦你让它工作,下次就很容易做到,不需要外部库。我也推荐它,因为它比大多数其他Json库更快。

注意:您需要Unity 5.3及更高版本才能使其正常工作。

编辑:

根据我的评论,这有效

foreach (var i in data as IList){

}
于 2016-05-08T22:22:01.547 回答