2012-10-10 58 views
6

所以followwing工作得很好,給我一個團隊對象從JSON字符串:使用newtonsoft,如何反序列化直到運行時間才知道類型?

var found = JsonConvert.DeserializeObject<Team>(json); 

,但如果我不知道是什麼類型的,直到運行?說我有上面的字符串json,但我也有另一個字符串的類型名稱?例如,這是行不通的:

var found = JsonConvert.DeserializeObject(json, Type.GetType("Team")); 

無法轉換類型 'Newtonsoft.Json.Linq.JArray' 到類型的對象......

+0

您可以使用模板版本? 'JsonConvert.DeserializeObject (json)' –

+0

直到運行時我才知道T.我有一個字符串告訴我要反序列化的類型。 –

+0

如果你有一個JArray,它不會是一個對象 - 你可能需要爲你的類型創建一個IEnumerable類型。 –

回答

6

這爲我工作:

var type = Type.GetType("My.Namespace.Class"); 
var myObj = JsonConvert.DeserializeObject(item, type); 

訣竅是通過提供正確的類名來確保type不爲空。如果是,反序列化仍然可以工作,但輸出不會是你想要的類型。有關GetType的更多信息,請參閱MSDN

-3

創建Deserialize方法,需要一個泛型類型:

public T Deserialize<T>(string obj) where T : class 
{ 
    return JsonConvert.DeserializeObject<T>(obj); 
} 

然後調用它像:

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

static void Main(string[] args) 
{ 
    string json = "{ "Person": { "FirstName": "Scott", "LastName": "Lance"}}"; 
    var person = Deserialize<Person>(json); 

    // Do whatever with the person object 
} 
相關問題