我在下面的代码段的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)
{
...
}
}
答案 0 :(得分:1)
LitJson.JsonData
类声明为:
public class JsonData : IJsonWrapper, IEquatable<JsonData>
IJsonWrapper
依次来自这两个界面:System.Collections.IList
和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;
}