C# LitJSON:无法在Unity中使用foreach

C# LitJSON:无法在Unity中使用foreach,c#,unity3d,foreach,litjson,C#,Unity3d,Foreach,Litjson,我正在使用加载.json数据,我正在运行一些带有foreach循环的测试代码,但它不起作用 InvalidOperationException: Instance of JsonData is not a dictionary LitJson.JsonData.EnsureDictionary() (运行foreach行时引发此错误) 根据(Ctrl+F“foreach”;它在页面底部附近),我非常确定这段代码应该可以工作(?) 有人知道为什么这样不行吗?建议将不胜感激 编辑:解决方案是将数据

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

InvalidOperationException: Instance of JsonData is not a dictionary
LitJson.JsonData.EnsureDictionary()
(运行foreach行时引发此错误)

根据(Ctrl+F“foreach”;它在页面底部附近),我非常确定这段代码应该可以工作(?)

有人知道为什么这样不行吗?建议将不胜感激

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

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

1。不要在非统一数组的任何对象上使用
foreach
。它无情地分配内存

2.Unity有一个内置的
Json
序列化,名为
JsonUtility
。我建议你用这个。它目前不支持数组,您的问题表明您正在使用
Json
array。有一个解决方案可以让它与数组一起工作。看。从上面写着2的地方读。多数据(数组JSON)。一旦你让它工作,它将很容易做下一次,而不需要外部库。我还推荐它,因为它比大多数其他
Json
库更快

注意:您需要Unity 5.3及以上版本才能使其正常工作

编辑:

从我的评论来看,这是有效的

foreach (var i in data as IList){

}

1。不要在非统一数组的任何对象上使用
foreach
。它无情地分配内存

2.Unity有一个内置的
Json
序列化,名为
JsonUtility
。我建议你用这个。它目前不支持数组,您的问题表明您正在使用
Json
array。有一个解决方案可以让它与数组一起工作。看。从上面写着2的地方读。多数据(数组JSON)。一旦你让它工作,它将很容易做下一次,而不需要外部库。我还推荐它,因为它比大多数其他
Json
库更快

注意:您需要Unity 5.3及以上版本才能使其正常工作

编辑:

从我的评论来看,这是有效的

foreach (var i in data as IList){

}


Offtopic:我会避免使用自2014年以来一直没有更新过的库,您有Json.Net,这是在.Net上处理Json的事实上的标准库,您也可以使用ServiceStack序列化程序以获得更好的性能。@Gusman理解-我一直在考虑使用最近更新过的另一个库。不幸的是,看起来Json.Net for Unity只是付费的,但是似乎还有一些其他的免费选项看起来也很有希望。嗯,不确定Unity editor是如何工作的,但是如果你可以引用.Net程序集,那么只需下载常规库并使用它们。此外,您可以访问Json.net的github,下载代码并将其添加到您的项目中,它被授权为MIT,因此您不会有任何问题。我可能会在某个时候尝试一下,但是,我已经了解到Unity在使用标准.net功能方面有一些怪癖,因此我对这方面没有太多期望。不管怎样,我能够解决我最初的问题(解决方案张贴在上面)。谢谢你的帮助!唯一的问题是(如果我没记错的话)它必须是PCL兼容的,Json.net是.Offtopic:我会避免一个自2014年以来就没有更新过的库,你有Json.net,它是.net上处理Json的事实上的标准库,您还可以使用ServiceStack序列化程序以获得更好的性能。@Gusman理解-我一直在研究使用最近更新的另一个库。不幸的是,看起来Json.Net for Unity只是付费的,但是似乎还有一些其他的免费选项看起来也很有希望。嗯,不确定Unity editor是如何工作的,但是如果你可以引用.Net程序集,那么只需下载常规库并使用它们。此外,您可以访问Json.net的github,下载代码并将其添加到您的项目中,它被授权为MIT,因此您不会有任何问题。我可能会在某个时候尝试一下,但是,我已经了解到Unity在使用标准.net功能方面有一些怪癖,因此我对这方面没有太多期望。不管怎样,我能够解决我最初的问题(解决方案张贴在上面)。谢谢你的帮助!唯一的问题是(如果我没记错的话)它必须是PCL兼容的,Json.net就是。我的数据实际上有点复杂,并且包含嵌套的字典/数组等等。Unity中内置的JsonUtility似乎只处理平面结构。我希望使用一个“只起作用”的库,而不必去实现一堆黑客的解决方法。如果可能的话,我也会尽量避免使用foreach。@Novark它确实有限制,但支持嵌套数组。我对字典不太清楚。为什么不使用for循环?@Novark如果for循环有效,我真的认为你没有问题。在我结束之前,您可以将原始代码添加到try-catch块中,并查看它是否会引发任何错误。只需将代码复制到这里
试试{foreach(数据中的jsondatai){Debug.Log(“foreach:+i”);}}}catch(System.Exception e){Debug.Log(“Error:+e.Message”)}
我出于好奇运行了您的代码片段,它找到了catch,并记录与我原来帖子中相同的错误。不过,我已经验证了for循环可以工作,所以我可能会选择这条路线。是的!IList解决了这个问题。谢谢你的帮助!我的数据实际上有些复杂,包含嵌套的字典/数组等等。Unity中内置的JsonUtility似乎只处理平面结构。我希望使用一个“只起作用”的库,而不必去实现一堆黑客的解决方法。如果可能的话,我也会尽量避免使用foreach。@Novark它确实有限制,但支持嵌套数组。我对字典不太清楚。为什么不使用循环?@Novark我真的不认为你