Как десериализовать объект JObject для .NET

Я с радостью использую библиотеку Newtonsoft JSON. Например, я бы создал объект JObject из объекта .NET, в данном случае экземпляр Exception (может быть или не быть подклассом)

if (result is Exception)
    var jobjectInstance = JObject.FromObject(result);

теперь я знаю, что библиотека может десериализовать текст JSON (т.е. строку) объекту

// only works for text (string)
Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext); 

но я ищу:

// now i do already have an JObject instance
Exception exception = jobjectInstance.????

Хорошо, что я могу перейти от JObject к тексту JSON, а затем использовать функциональность десериализации, но это кажется мне обратным.

Ответ 1

В соответствии с этим post это намного лучше:

// pick out one album
JObject jalbum = albums[0] as JObject;

// Copy to a static Album instance
Album album = jalbum.ToObject<Album>();

Документация: Преобразование JSON в тип

Ответ 2

Из документации я нашел это

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

Edit

Если вы используете последнюю версию JSON.net и не нуждаетесь в специальной сериализации, см. выше ответ TianDo (или ниже, если вы повышаете меня: P), что является более кратким.