当我不知道我使用什么类时,如何反序列化json数组?

Kli*_*Max 3 c# json

我有一个json

var j = @"
    [{"Name":"John","Age":27},
     {"Name":"Mike","Age":30},
     {"Name":"Eric","Age":21}
    ]";
Run Code Online (Sandbox Code Playgroud)

和班级:

public class Worker
{
    public string Name{set;get;}
    public int Age{set;get;}
} 
Run Code Online (Sandbox Code Playgroud)

以及如何通过以下方式对其进行反序列化Newtonsoft.Json:

List<Worker> videogames = JsonConvert.DeserializeObject<List<Worker>>(j);
Run Code Online (Sandbox Code Playgroud)

但是,如果我不知道我想要反序列化哪个类并只有一个类型呢?

var worker = new Worker();
Type myType = worker.GetType();
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何反序列化这个json字符串?

Jon*_*eet 7

只需使用接受a 的JsonConvert.DeserializeObject重载Type,传入构造的列表类型:

Type listType = typeof(List<>).MakeGenericType(myType);
object list = JsonConvert.DeserializeObject(json, listType);
Run Code Online (Sandbox Code Playgroud)

当然,之后您将无法以静态类型安全的方式使用它 - 可能需要投射它 - 但如果您尝试使用仅在执行时已知的类型,则这是不可避免的.