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

时间:2015-05-18 23:58:06

标签: c# exception unityscript litjson

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

  

exception:System.InvalidCastException:无法从源类型转换为目标类型。

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

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

1 个答案:

答案 0 :(得分:1)

LitJson.JsonData类声明为:

public class JsonData : IJsonWrapper, IEquatable<JsonData>

IJsonWrapper依次来自这两个界面:System.Collections.IListSystem.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;
}