Unity LitJson.JsonData foreach 循环中的强制转换异常

Unity LitJson.JsonData exception on cast in foreach loop

我在下面代码段的 foreach 语句中遇到以下异常:

exception:System.InvalidCastException: Cannot cast from source type to destination type.

我仔细看了看LitJson.JsonData。它确实有 internal class OrderedDictionaryEnumerator : IDictionaryEnumerator 实现。我不确定缺少什么。有什么想法吗?

protected static IDictionary<string, object> JsonToDictionary(JsonData in_jsonObj)
{
    foreach (KeyValuePair<string, JsonData> child in in_jsonObj)
    {
        ...
    }
}

LitJson.JsonData class 声明为:

public class JsonData : IJsonWrapper, IEquatable<JsonData>

其中 IJsonWrapper 依次派生自这两个接口:System.Collections.IList and System.Collections.Specialized.IOrderedDictionary

请注意,这两个都是 非通用 集合版本。枚举时,您不会得到 KeyValuePair<> 作为结果。相反,它将是一个 System.Collections.DictionaryEntry 实例。

因此您必须将 foreach 更改为:

foreach (DictionaryEntry child in in_jsonObj)
{
    // access to key
    object key = child.Key;
    // access to value
    object value = child.Value;

    ...

    // or, if you know the types:
    var key = child.Key as string;
    var value = child.Values as JsonData;
}