如何将一个JObject反序列化为.NET对象
我高兴地使用Newtonsoft JSON库 。 例如,我将创build一个.NET对象的JObject
,在这种情况下,一个Exception的实例(可能或可能不是一个子类)
if (result is Exception) var jobjectInstance = JObject.FromObject(result);
现在我知道库可以反序列化JSON文本(即string)到一个对象
// only works for text (string) Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext);
但我正在寻找的是:
// now i do already have an JObject instance Exception exception = jobjectInstance.????
那么很显然,我可以从JObject
返回到JSON文本,然后使用反序列化function,但似乎倒退给我。
根据这个post ,现在好多了:
// pick out one album JObject jalbum = albums[0] as JObject; // Copy to a static Album instance Album album = jalbum.ToObject<Album>();
文档: 将JSON转换为types
从我find这个文件
JObject o = new JObject( new JProperty("Name", "John Smith"), new JProperty("BirthDate", new DateTime(1983, 3, 20)) ); JsonSerializer serializer = new JsonSerializer(); Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person)); Console.WriteLine(p.Name);
Person
的类定义应与以下内容兼容:
class Person { public string Name { get; internal set; } public DateTime BirthDate { get; internal set; } }
编辑
如果您使用的是最新版本的JSON.net, 并且不需要自定义序列化,请参阅上面的TienDo的答案(或者如果您赞扬我:P),这更简洁。