2014-05-14 6 views
5

Mam List<dynamic> i muszę przekazać wartości i typ listy do usługi. Kod usługa będzie coś takiego:Jak uzyskać typ obiektu dynamicznego w języku 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: Wartości na liście

Jak mogę rzucić typ listy do określonego typu czy typ listy jest dynamiczny (List<dynamic>) ?

+0

[Czy ta odpowiedź pomoc?] (Http://stackoverflow.com/a/557349/61470) – DaveParsons

+1

Jeśli nie znasz typu w czasie kompilacji nie można. (Chyba, że ​​używasz odbicie) –

+0

Nie można przesłać go do statycznie wpisanego obiektu, nawet za pomocą odbicia. –

Odpowiedz

1

Jeśli dobrze Cię rozumiem, masz List<dynamic> i chcesz utworzyć listę z odpowiednim typem środowiska wykonawczego obiektu dynamicznego?

Byłoby coś w tym pomoc:

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

Na innym uwaga, myślę, że powinieneś przemyśleć projekt kodzie. Nie mam wystarczająco dużo kontekstu, ale jestem ciekawy, dlaczego używasz tutaj dynamiki. Posiadanie List<dynamic> zasadniczo oznacza, że ​​nie obchodzi cię, jaki jest typ listy przychodzącej. Jeśli naprawdę zależy Ci na typie (wygląda na to, że robisz serializację), może nie powinieneś używać dynamicznego.

+0

Dziękuję za odpowiedź. Rozumiem, dynamiczny jest typ obiektu (kiedy używam metody typu get). O kodzie ponownego przemyślenia: Mam usługę do renderowania raportu, więc muszę przekazać do niego wszystkie zasoby w postaci ciągu znaków i dlatego używam powyższego kodu. Nie mogę jasno powiedzieć, ponieważ wymaga tego praca. –

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