我收到了data
类型的object {System.Collections.Generic.Dictionary<string, object>}
。解析起来非常简单:
Dictionary<string, object> parsedData = data as Dictionary<string, object>;
现在,我正在尝试访问类型为parsedData["stringArr"]
的{{1}}。尝试将此object {object[]}
转换为object {object[]}
时遇到问题。
我什至无法迭代:
string[]
答案 0 :(得分:2)
像object
一样获得string[]
值的一种方法是使用as
强制转换,就像对原始data
所做的那样:
object data = new Dictionary<string, object>
{
{"stringArr", new[] {"item1", "item2", "item3"}},
};
var parsedData = data as Dictionary<string, object>;
// cast the object values to string[]
foreach (var o in parsedData["stringArr"] as string[])
{
Console.WriteLine(o);
}
// Output:
// item1
// item2
// item3
答案 1 :(得分:1)
这是因为parsedData["stringArr"]
是object
,而不是object[]
。
我认为您想更改字典类型参数:
Dictionary<string, object[]> parsedData = data as Dictionary<string, object[]>;
答案 2 :(得分:1)
如果您有Dictionary<string, object>
,并且知道特定键的值具有更特定的类型,则将其强制转换为该类型:
foreach (string s in (string[])parsedData["stringArr"])
如果该键上的值不是该类型,那么您当然会收到异常。一种“安全”的方式是先检查:
if (parsedData["stringArr"] as string[] data != null)
{
foreach (string s in data)
{
...
}
}
答案 3 :(得分:0)
首先,感谢大家为我解决问题所付出的精力。如果没有您,我会再敲几个小时。我不明白为什么还需要额外转换为object[]
,但是有效的方法是:
Dictionary<string, object> parsedData = data as Dictionary<string, object>;
if (parsedData.ContainsKey("stringArr"))
{
foreach (object o in parsedData["stringArr"] as object[])
{
string myString = o.ToString();
}
}