添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
深沉的烈马  ·  TypeScript: ...·  1 周前    · 
坚强的遥控器  ·  Dynamics Community ...·  6 天前    · 
活泼的伤疤  ·  Strange behavior of ...·  4 天前    · 
爱听歌的炒饭  ·  ASP.NET Core MVC ...·  2 天前    · 
苦闷的手套  ·  EDR 威胁响应 API·  1小时前    · 
眼睛小的烤地瓜  ·  內嵌儀表板 - Tableau·  7 月前    · 
追风的手链  ·  recyclerview item ...·  1 年前    · 
潇洒的西瓜  ·  对象存储 PUT Object-API ...·  2 年前    · 
跑龙套的茶壶  ·  【pandas】 之 ...·  2 年前    · 
  • ASP.NET Core Identity Series
  • IdentityServer4, OAuth, OIDC Series
  • Angular with ASP.NET Core Identity
  • Blazor WebAssembly
  • .NET Collections
  • SOLID Principles in C#
  • ASP.NET Core Web API Best Practices
  • Top REST API Best Practices
  • Angular Development Best Practices
  • 10 Things You Should Avoid in Your ASP.NET Core Controllers
  • C# Back to Basics
  • C# Intermediate
  • Design Patterns in C#
  • Sorting Algorithms in C#
  • Docker Series
  • Angular Series
  • Angular Material Series
  • HTTP Series
  • .NET/C# Author
  • .NET/C# Editor
  • About Us
  • Archives
  • Our Editors
  • Leave Us a Review
  • Code Maze Reviews
  • Contact Us
  • In this article, we are going to learn different ways to get value by key from JObject in C#.

    To download the source code for this article, you can visit our GitHub repository .

    Let’s start.

    What Is JObject?

    JObject is a class type in the Json.NET library that represents a JSON object. The class provides methods that enable us to manipulate JSON data, like:

  • Creating JSON objects
  • Parsing JSON and reading data
  • Adding data to JSON objects
  • We won’t go deep into each of these use cases. Instead, we will only look at parsing JSON and reading data. We also covered how to iterate over a JSON array and how to deserialize JSON into a dynamic object using Json.Net.

    Data Preparation

    Our main focus for this article is learning how to read data from a JSON object using JObject. So let’s create a simple console application and install the Json.NET library using the command:

    NuGet\Install-Package Newtonsoft.Json

    After that, let’s add a new TestData class with a single method:

    public string GenerateSingleJsonObject()
        const string car = $$"""
                "name": "Charger",
                "make": "Dodge",
                "model": "RT",
                "year": 2019,
                "price": {
                  "amount": 36100,
                  "currency": "USD"
            """ ;
        return car;
    

    We have a method that returns a single JSON object as a string.

    Now, let’s proceed to look at different ways how to get value by key from JObject in C# and process this JSON string. 

    Different Ways to Get Value by Key From JObject

    The Json.NET library provides us flexibility when reading values from a JSON object. We are going to look at four ways to do this:

  • Passing the key as an index
  • Using the JObject.Value<T>() method
  • Using the JObject.SelectToken() method
  • Using the JObject.TryGetValue() method
  • First, let’s add a new JObjectManipulation class, which we’ll use to illustrate these four approaches:

    public class JObjectManipulation
        public string SingleJsonObject { get; set; }
        public JObjectManipulation()
            InitializeData();
        public void InitializeData()
            var testData = new TestData();
            SingleJsonObject = testData.GenerateSingleJsonObject();
    

    In this class, we are initializing the SingleJsonObject class property in the InitializeData() method, which we then call in the constructor.

    Passing the Key as an Index

    In the JObjectManipulation class, let’s add a new method:

    public int GetValuesUsingIndex()
        var jsonObject = JObject.Parse(SingleJsonObject);
        var name = (string)jsonObject["name"];
        var make = (string)jsonObject["make"];
        var model = (string)jsonObject["model"];
        var year = (int)jsonObject["year"];
        var price = (JObject)jsonObject["price"];
        var amount = (int)price["amount"];
        var currency = (string)price["currency"];
        Console.WriteLine($"A {make} {name} {model} {year} costs {amount} {currency} \n");
        return jsonObject.Count;
    

    We first convert the SingleJsonObject string to a JObject using JObject.Parse. To get values from the JSON object, we pass the keys as indexes to the JObject, using the square bracket notation. After getting the values, we cast them to the desired type. 

    The price key has nested JSON with amount and currency key-value pairs. To get these values, we follow the same steps, by first converting the value of price to a JObject using a cast:

    Wanna join Code Maze Team, help us produce more awesome .NET/C# content and get paid? >> JOIN US! <<

    var price = (JObject)jsonObject["price"]

    Then, we access the values of amount and currency using the index of the resulting JObject:

    var amount = (int)price["amount"];
    var currency = (string)price["currency"];

    If the JSON data is not deeply nested, we can use this method to get the values. However, if our JSON object has a deep hierarchy, accessing a value that is deep can be very tedious. That’s where the Value<T>() method comes into play.

    Let’s tackle it next.

    Using the Value<T>() Method

    Using this method, we directly pass the key as the parameter to the method. In addition to that, we also pass the appropriate type as a type argument to the Value<T> method. The method then returns the value already cast.

    That said, let’s create a new GetValuesUsingValueMethod method:

    public int GetValuesUsingValueMethod()
        var jsonObject = JObject.Parse(SingleJsonObject);
        var name = jsonObject.Value<string>("name");
        var make = jsonObject.Value<string>("make");
        var model = jsonObject.Value<string>("model");
        var year = jsonObject.Value<string>("year");
        var amount = jsonObject.Value<int>("price.amount");
        var currency = jsonObject.Value<string>("price.currency");
        Console.WriteLine($"A {make} {name} {model} {year} costs {amount} {currency} \n");
        return jsonObject.Count;
    

    We first convert the SingleJsonObject string to a JObject. Then, we use the Value<T>() method to get values from the JObject and assign them to local variables. In cases where we have nested JSON, we pass the keys separated by the . operator.

    Compared to the first approach, using the Value<T>() method is less tedious when working with a nested JSON object. However, to get the correct value, we have to pass the right key.

    Wanna join Code Maze Team, help us produce more awesome .NET/C# content and get paid? >> JOIN US! <<

    Using the SelectToken() Method

    To continue, let’s add a new method to the JObjectManipulation class:

    public int GetValuesUsingSelectToken()
        var jsonObject = JObject.Parse(SingleJsonObject);
        var name = (string)jsonObject.SelectToken("name");
        var make = (string)jsonObject.SelectToken("make");
        var model = (string)jsonObject.SelectToken("model");
        var year = (int)jsonObject.SelectToken("year");
        var amount = (int)jsonObject.SelectToken("price.amount");
        var currency = (string)jsonObject.SelectToken("price.currency");
        Console.WriteLine($"A {make} {name} {model} {year} costs {amount} {currency} \n");
        return jsonObject.Count;
    

    The first step is creating a JObject from the JSON string. After that, we call the SelectToken method passing the keys as parameters. Then, we cast the values to appropriate data types. 

    When working with more complex JSON data, the SelectToken() method would be the best choice of the three. Beyond basic usage, it offers some advanced capabilities like:

  • Querying JSON arrays using indexes
  • Support for JSONPath queries
  • Support for LINQ queries
  • When we call each of these methods discussed, we get this output in the console:

    A Dodge Charger RT 2019 costs 36100 USD

    In each of the approaches we have covered so far, we will get an exception whenever the JSON key is missing. Let’s look at an alternative approach.

    Using the JObject.TryGetValue() Method

    The TryGetValue takes both the key and output variable as parameters. Then, it tries to get the JSON token that matches the specified key. If the token is found, this method returns true otherwise, it returns false

    Let’s demonstrate this: 

    Wanna join Code Maze Team, help us produce more awesome .NET/C# content and get paid? >> JOIN US! <<
    public int GetValuesUsingTryGetValue()
        JObject jsonObject = JObject.Parse(SingleJsonObject);
        if (jsonObject.TryGetValue("name", out JToken nameToken))
            string name = (string)nameToken;
            Console.WriteLine($"Name: {name}");
        if (jsonObject.TryGetValue("make", out JToken makeToken))
            string make = (string)makeToken;
            Console.WriteLine($"Make: {make}");
        if (jsonObject.TryGetValue("price", out JToken priceToken) && priceToken is JObject priceObject)
            if (priceObject.TryGetValue("amount", out JToken amountToken))
                int amount = (int)amountToken;
                Console.WriteLine($"Price amount: {amount}");
            if (priceObject.TryGetValue("currency", out JToken currencyToken))
                string currency = (string)currencyToken;
                Console.WriteLine($"Price currency: {currency}");
        return jsonObject.Count;
    

    We are passing the keys for which we want to get values together with JToken objects. If the method returns true, we cast the JToken objects into specified types. 

    Similarly, we have a nested JSON price object. In this case, we first call the TryGetValue method passing the price key. If this returns true, we use the is operator to check if priceToken is a JObject. If this check returns true as well, we proceed to access the values of the price nested JSON object.

    Calling this method, we get:

    Name: Charger
    Make: Dodge
    Price amount: 36100
    Price currency: USD

    Using TryGetValue method, if any of the keys we are trying to access is missing, the method returns false. This way, we are not trying to access the values of a non-existent key.

    The appropriate use case for this method is when working with JSON data from an API where the data does not have a fixed structure. In this case, if a key is missing, our application won’t break.

    Conclusion

    In this article, we have learned how to get value by key from JObject in C# to process JSON data. We hope this guide will be of assistance when developing future applications.