2014-05-14 41 views
5

我有List<dynamic>,我需要將列表的值和類型傳遞給服務。 服務代碼將是這樣的:如何獲取C#中動態對象的類型?

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>) ?

+0

[這是否回答幫助?(http://stackoverflow.com/a/557349/61470) – DaveParsons

+1

如果你不知道在編譯的時候你不能類型。(除非你使用反射) –

+0

即使使用反射,也不能將其轉換爲靜態類型的對象。 –

回答

1

如果我正確理解你,你有一個List<dynamic>,你想創建一個與動態對象的適當運行時類型的列表?

會是這樣的幫助:

​​

在另一方面,我認爲你應該重新考慮你的代碼的設計。我沒有足夠的背景,但我很好奇你爲什麼在這裏使用動態。有一個List<dynamic>基本上意味着你不關心什麼類型的傳入列表。如果你真的關心類型(就像你在做序列化一樣),也許你不應該使用動態。

+0

感謝您的回覆。我發現,動態是一個對象類型(當我使用get類型方法)。 關於重新思考代碼:我有服務來呈現報表,所以我需要將所有資源都傳遞給它,這是我使用上述代碼的原因。因爲工作的要求,我不能說清楚。 –

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); 
      }