2012-08-04 58 views
2

我有一個對象的System.Type,我想用它作爲參數傳遞給泛型函數:JsonConvert.DeserializeObject<T>()轉換的System.Type到T參數

當然JsonConvert.DesierializeObject<theType>()是不行的。我似乎需要類的名字,但我不知道如何從類型中獲得它。

有沒有辦法將類型轉換回T,所以我可以調用函數?

回答

1

是否使用json.net通過他們在最後一行Invoke方法的第二個參數...? JsonConvert有另一種方法

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

你可以用這一個,像

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

我想DeserializeObject是一個靜態方法?嘗試使用反射:

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

如果DeserializeObject tooks一些參數,然後

+0

查理回答了JSonConvert的具體問題,但這個答案是更普遍 – JoelFan 2014-10-15 19:10:56