将对象{object []}转换为字符串[]

时间:2019-10-18 15:06:43

标签: c# asp.net

我收到了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[]

4 个答案:

答案 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();
                }

            }