将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 } }