下面是我编写的一个简单方法(非常简化,所以我希望它仍然能够理解要点),用于获取字符串中数组元素的字符串表示形式,并将它们转换为这些值的实际数组。 t 是数组的类型。
DeserializeArray(string sArrayElements, out Array aValues, Type t)
{
string[] sValues = ProcessArrayElements(sArrayAsString);
ArrayList alValues = new ArrayList(sValues.Length);
for(int i = 0; i < sValues.Length; ++i)
alValues.Add(ProcessValue(sValues[ i ] ));
aValues = alValues.ToArray(t.GetElementType());
return true;
}
然后我会将此方法与下面的代码一起使用。 propertyInfo 是对象的属性,在本例中为 .IsArray() == true。 sArrayElements 只是包含数组的字符串表示形式的字符串(“val1,val2,...,valN”)
Array aValues;
if (DeserializeArray(sArrayElements, out aValues, propertyInfo.PropertyType))
propertyInfo.SetValue(oObject, aValues, null);
else
throw new FormatException("Unable to parse Array Elements: " + sArrayElements);
这在 .NET 中工作得很好,但在 Silverlight 中则不然,因为 ArrayList 对象被标记为 Internal 或其他东西(不能使用类型,因为访问级别等等)。
所以我正在寻找 ArrayList.ToArray(Type) 的替代方案。我不能只使用 List
我尝试在 DeserializeArray() 方法中执行类似 aValues = Array.CreateInstance(t.GetElementType()) 的操作,但我无法使用 [] 来分配值,并且您无法将值分配给 foreach(obj in objects) 。
然后,我尝试将 aValues 参数更改为通用 object[] 数组,但在调用 Array.CreateInstance() 时,我在运行时遇到相同的转换(装箱/拆箱)错误。
嗯是的;我正在尝试为 Silverlight 4 找到此问题的解决方案。任何帮助将不胜感激:)