Unknown
Unknown

Reputation: 1238

How to get partial properties from JSON returned from HttpClient fast?

I have a JSON snippet here taken from HttpClient class below in a C# .NET 5 program.

Simplified JSON:

{
    "Restaurants":
    [
        {
            "Id": 138898,
            "Name": "Willesborough Cafe",
            "Rating": {
                "Count": 76,
                "Average": 5.92,
                "StarRating": 5.92
            },
            "CuisineTypes": [
                {
                    "Id": 92,
                    "IsTopCuisine": false,
                    "Name": "Breakfast",
                    "SeoName": "breakfast"
                }, {
                    "Id": 106,
                    "IsTopCuisine": true,
                    "Name": "British",
                    "SeoName": "british"
                }
            ],
            "Cuisines": [
                {
                    "Name": "Breakfast",
                    "SeoName": "breakfast"
                }, {
                    "Name": "British",
                    "SeoName": "british"
                }
            ]
        }
    ]
}

Current code:

            dynamic result =
                await _httpClient.GetFromJsonAsync<dynamic>(url);
            // dynamic result2 = JsonConvert.DeserializeObject<dynamic>(result); // slow
            dynamic result2 = JObject.Parse(result); // slow

I am interested to get the info from each restaurant below from the Restaurants array:

  1. Name
  2. Rating
  3. CusineType

I use dynamic as I do not need to create multiple classes based on the JSON structure & I do not need to change my class if the JSON structure changes.

I have tried JsonConvert.DeserializeObject & JObject.Parse.

However, the Visual Studio debugging stuck at either of the method for a very long period

What is the recommended method to get partial properties from a huge JSON response?

Thanks

Upvotes: 0

Views: 1362

Answers (1)

Mohammad Aghazadeh
Mohammad Aghazadeh

Reputation: 363

You can make a class with named properties

    class Restaurant
{
    public string Name { get; set; }

    public Rating Rating { get; set; }

    public List<CuisineType> CuisineTypes { get; set; }
}

class Rating
{
    public int Count { get; set; }
    public decimal Average { get; set; }
    public decimal StarRating { get; set; }
}

class CuisineType
{
    public int Id { get; set; }
    public bool IsTopCuisine { get; set; }
    public string Name { get; set; }
    public string SeoName { get; set; }
}

and deserialize json to instance of Restaurant then you have a type you need. That's it. You need to have a class contains list of Restaurant, because you must have a property equal name with your json object

class RestaurantList { public List<Restaurant> Restaurants {get; set;} } 

Now you need a code to bind section of json to object

var restaurants = JsonConvert.DeserializeObject<RestaurantList>(result);

Upvotes: 2

Related Questions