我想将我不知道其类型的 JSON 字符串反序列化为类型Object
的对象,并能够使用反射访问其属性。 当我使用这个时
object myObject = JsonConvert.DeserializeObject("{'Id':'1'}");
myObject
的类型是JObject
类型,我无法使用反射访问其属性。
有没有办法使用 Json.net 或任何其他 JSON 反序列化程序来做到这一点?
我认为您可以将对象反序列化为Dictionary<string,string>
或expandoobject
(也可以转换为IDictionary<string,object>
),然后您不需要使用反射来获取属性,您可以通过字典获取它们。
请参阅:使用 Newtonsoft JSON.NET 反序列化动态 JSON 字符串
这不允许你使用反射本身,但 ExpandoObject 确实允许你迭代属性:
string json = "{'Id':'1'}";
var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter);
IDictionary<string, object> dict = (IDictionary<string, object>)obj;
foreach (string key in dict.Keys)
{
Console.WriteLine(key);
}