Deserialize only one property of a JSON file

If the intend is to deserialize only one property, I generally perefer to use JsonPath due to its flexibility. Please check the code below

var jsonQueryString = "{ 'firstName': 'John',
 'lastName' : 'doe',
 'age'      : 26,}";
JObject o = JObject.Parse(jsonQueryString);
JToken token= o.SelectToken("$.age");   
Console.WriteLine(token);

If your Json is complex, you can use power of JsonPath. you can check https://support.smartbear.com/readyapi/docs/testing/jsonpath-reference.html#examples for JsonPath detailed documentation and examples.

I also included example below for further usage information:

JObject o = JObject.Parse(@"{
        'store': {
            'book': [
            {
                'category': 'history',
                'author': 'Arnold Joseph Toynbee',
                'title': 'A Study of History',
                'price': 5.50
            },
            ...
            ]
        },
        'expensive': 10
        }");
        //gets first book object
        Console.WriteLine(o.SelectToken("$..book[0]"));
        //get first book's title
        Console.WriteLine(o.SelectToken("$..book[0].title"));

        // get authors of the books where the books are cheaper then 10 $
        foreach (var token in o.SelectTokens("$..[?(@.price < 10)].author"))
            Console.WriteLine(token);

.NET 5+

The solution is very simple:

using System.Text.Json;

var doc = JsonDocument.Parse(response.Content);
var popupJson= doc.RootElement.GetProperty("menu").GetProperty("popup");

You can actually utilize the Linq namespace of the NewtonSoft.Json and modify your code little bit to get only the "popup" elements from the JSON.

your class structure remains the same. Make sure you use the namespace(s)

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

then in your code once you have the JSON string with you, you can use the "JObject" static method "Parse" to parse the JSON, like

   var parsedObject = JObject.Parse(jsonString);

This will give you the JObject with which you can access all your JSON Keys just like a Dictionary.

var popupJson = parsedObject["menu"]["popup"].ToString();

This popupJson now has the JSON only for the popup key. with this you can use the JsonConvert to de- serialize the JSON.

var popupObj = JsonConvert.DeserializeObject<Popup>(popupJson);

this popupObj has only list of menuitems.


If you do not use Newtonsoft and are using System.Text.Json in .NET Core, you can use this:

var post = JsonDocument.Parse(stringifiedJson);
var cat = post.RootElement.GetProperty("category").GetString();

You see GetString here to cast the value to string, there are other overloads available to cast the json value to Int32 etc.