我有一个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<dynamic>),如何将列表的类型转换为特定类型?

最佳答案

如果我对您的理解正确,那么您有一个List<dynamic>,并且想创建一个具有动态对象的适当运行时类型的列表吗?

这样的事情会有所帮助:

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>基本上意味着您无需关心传入列表的类型。如果您真的在乎类型(看起来像在进行序列化时一样),则可能不应该使用动态类型。

10-04 21:46
查看更多