使用newtonsoft,如何在不知道类型直到运行时反序列化?

Tra*_*rde 8 json json.net

所以followwing工作得很好,从字符串json给我一个Team对象:

var found = JsonConvert.DeserializeObject<Team>(json);
Run Code Online (Sandbox Code Playgroud)

但如果直到运行时我才知道类型怎么办?假设我有上面的字符串json,但我还有另一个字符串类型名称?例如,这不起作用:

var found = JsonConvert.DeserializeObject(json, Type.GetType("Team"));
Run Code Online (Sandbox Code Playgroud)

无法将"Newtonsoft.Json.Linq.JArray"类型的对象强制转换为...

nic*_*k_w 8

这对我有用:

var type = Type.GetType("My.Namespace.Class");
var myObj = JsonConvert.DeserializeObject(item, type);
Run Code Online (Sandbox Code Playgroud)

诀窍是type通过提供正确的类名来确保它不为null.如果是,反序列化仍然可以工作,但输出将不是您想要的类型.有关详细信息,请参阅MSDNGetType.