How to deserialize a JObject to .NET object – Dev

The best answers to the question “How to deserialize a JObject to .NET object” in the category Dev.


I happily use the Newtonsoft JSON library.
For example, I would create a JObject from a .NET object, in this case an instance of Exception (might or might not be a subclass)

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

now I know the library can deserialize JSON text (i.e. a string) to an object

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

but what I am looking for is:

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

Well it is clear that I can go from on JObject back to JSON text and then use the deserialize functionality, but that seems backwards to me.


From the documentation, I found this:

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


The class definition for Person should be compatible to the following:

class Person {
    public string Name { get; internal set; }
    public DateTime BirthDate { get; internal set; }

If you are using a recent version of and don’t need custom serialization, please see Tien Do’s answer, which is more concise.


According to this post, it’s much better now:

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

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

Documentation: Convert JSON to a Type


Too late, just in case some one is looking for another way:

void Main()
    string jsonString = @"{
  'Stores': [
    'Lambton Quay',
    'Willis Street'
  'Manufacturers': [
      'Name': 'Acme Co',
      'Products': [
          'Name': 'Anvil',
          'Price': 50
      'Name': 'Contoso',
      'Products': [
          'Name': 'Elbow Grease',
          'Price': 99.95
          'Name': 'Headlight Fluid',
          'Price': 4

    Product product = new Product();
    //Serializing to Object
    Product obj = JObject.Parse(jsonString).SelectToken("$.Manufacturers[?(@.Name == 'Acme Co' && @.Name != 'Contoso')]").ToObject<Product>();


public class Product
    public string Name { get; set; }
    public decimal Price { get; set; }