2012-08-04 2 views
2

Je le System.Type d'un objet, et je veux l'utiliser comme un paramètre à une fonction générique: JsonConvert.DeserializeObject<T>()convertir System.Type à T Paramètre

Bien sûr JsonConvert.DesierializeObject<theType>() ne fonctionne pas .. Je semble avoir besoin le nom de la classe mais je ne sais pas comment l'obtenir du type.

Existe-t-il un moyen de convertir le type en T afin que je puisse appeler la fonction?

Répondre

1

Utilisez-vous json.net? JsonConvert a une autre méthode

public static object DeserializeObject(string value, Type type); 

vous pouvez utiliser celui-ci, comme

var result = JsonConvert.DeserializeObject("{ some json }", theType); 
5

Je suppose que DeserializeObject est une méthode statique? Essayez d'utiliser la réflexion:

var methodInfo = typeof(JsonConverter).GetMethod("DeserializeObject", System.Reflection.BindingFlags.Static | BindingFlags.Public); 
var genericArguments = new Type[] { theType }; 
var genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments); 
var result = genericMethodInfo.Invoke(null, null); 

Et si DeserializeObject Touque certains paramètres puis les passer dans le second paramètre de la méthode Invoke dans la dernière ligne ...

+0

Charlie a répondu à la question spécifique pour JSonConvert, mais cette réponse est plus générale – JoelFan

Questions connexes