将json动态反序列化为传入的任何对象.c#

我正在尝试将json反序列化为c#中的对象。 我希望能够做的是传递任何对象获取它的类型,并使用JSON.Net库将json反序列化为该特定对象。 以下是代码行。

Object someObject1 = someObject; string result = await content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(result); 

最后一行抛出exception

  operator '<' cannot be applied to operands of type 'method group' 

如何在没有c#抱怨的情况下获取中的数据类型。 我该怎么做才能使这段代码有效? 我错过了什么知识?

JsonConvert.DeserializeObject需要编译时类型。 你不能在运行时传递一个类型,因为你想要做的事情(没有什么不同于声明List )。 您应该反序列化为通用的json对象JObject (或动态 ),或者您应该创建一个对象的实例并用json填充它。

您可以使用静态方法PopulateObject (当然,如果对象的属性要反序列化的json 匹配 )。

 JsonConvert.PopulateObject(result, someObject1 ); 

您可以忽略generics方法并使用dynamic

 var myObj = (dynamic)JsonConvert.DeserializeObject(result); 

但是,如果对象的类型不同,则很难区分类型并可能遇到运行时错误。

这是给定JSON数据填充对象字段的最佳方法。

此代码作为方法属于对象本身。

 public void PopulateFields(string jsonData) { var jsonGraph = JObject.Parse(jsonData); foreach (var prop in this.GetType().GetProperties()) { try { prop.SetValue(this, fields[prop.Name].ToObject(prop.PropertyType), null); } catch (Exception e) { // deal with the fact that the given // json does not contain that property } }