我使用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");
}
}
根据example in the documentation(Ctrl + F" foreach&#34 ;;它位于页面底部附近),我非常确定此代码应该有效(? )。
任何人都有任何想法为什么这不起作用?建议将不胜感激!
编辑:解决方法是将数据投射到IList对象,如下所示:
foreach (JsonData i in data as IList) {
Debug.Log("foreach: " + i)
}
答案 0 :(得分:2)
1 。不要在Unity中没有数组的任何内容上使用foreach
。它无情地分配内存。
2 .Unity有一个名为Json
的内置JsonUtility
序列号。我建议你用它。它目前不支持数组,您的问题表明您正在使用Json
数组。有一个解决方案让它适用于数组。看here。从 2处读取。多个数据(ARRAY JSON)。一旦你开始工作,下次很容易做,不需要外部库。我也推荐它,因为它比大多数其他Json
库更快。
注意:您需要 Unity 5.3 及更高版本才能使其正常运行。
编辑:
根据我的评论,这有效
foreach (var i in data as IList){
}