我有一个List<dynamic>
,我需要将列表的值和类型传递给服务。
服务代码将是这样的:
Type type = typeof(IList<>);
// Type genericType = how to get type of list. Such as List<**string**>, List<**dynamic**>, List<**CustomClass**>
// Then I convert data value of list to specified type.
IList data = (IList)JsonConvert.DeserializeObject(this._dataSourceValues[i], genericType);
_dataSourceValues:列表中的值
如果List的类型是动态的(List<dynamic>
),如何将列表类型转换为特定类型?
答案 0 :(得分:1)
如果我理解正确你有一个List<dynamic>
并且你想创建一个具有动态对象的相应运行时类型的List?
这样的事情会有所帮助:
private void x(List<dynamic> dynamicList)
{
Type typeInArgument = dynamicList.GetType().GenericTypeArguments[0];
Type newGenericType = typeof(List<>).MakeGenericType(typeInArgument);
IList data = (IList)JsonConvert.DeserializeObject(this._dataSourceValues[i], newGenericType);
}
另一方面,我认为您应该重新考虑代码的设计。我真的没有足够的上下文,但我很好奇为什么你在这里使用动态。拥有List<dynamic>
基本上意味着您不关心传入列表的类型。如果你真的关心这种类型(看起来你正在进行序列化)也许你不应该使用动态。
答案 1 :(得分:1)
private void x(List<dynamic> dynamicList)
{
Type typeInArgument = dynamicList.GetType();
Type newGenericType = typeof(List<>).MakeGenericType(typeInArgument);
IList data = (IList)JsonConvert.DeserializeObject(this._dataSourceValues[i], newGenericType);
}