Fernando S. Kroes
Fernando S. Kroes

Reputation: 992

Convert json response to list

I do a request to a api that I'm using and this is the response that I get back.

{ "id": 1139, "performanceStatus": "OK", "availabilityStatus": "OK" }

I would like to convert this response in a list where I then can use a for/foreach loop and later can use linq and SelectMany to create a whole new list.

I got this far, but I am stuck the code is not hitting the var "newJson"..

Can someone help me out?

var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
dynamic parsedJson = JObject.Parse(json);
    foreach (var j in parsedJson)
    {
        j.Replace(JObject.FromObject(
        new {
            id = j.id,
            performance = j.performanceStatus,
            availability = j.availabilityStatus
            }));
    }

var newJson = parsedJson.ToString();

Later I would like to Deserialize it into a strongly typed class. Like so

boi = await Task.Run(() => JsonConvert.DeserializeObject<Boi>(newJson)).ConfigureAwait(false);

Here is the strongly typed class

public class Boi
    {
        public int Id { get; set; }

        public string PerformanceStatus { get; set; }

        public string AvailabilityStatus { get; set; }
    }

    public class NewBoi
    { 
        public List<Boi> eeg { get; set; }
    }

Upvotes: 2

Views: 1424

Answers (2)

Fran
Fran

Reputation: 6530

To deserialize to a well known type use

JsonConvert.Deserialize<T>(jsonString,new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
});

where T is your well known type.

Upvotes: 2

abrown
abrown

Reputation: 715

You could do this:

        var jsn = "{ \"id\": 1139, \"performanceStatus\": \"OK\", \"availabilityStatus\": \"OK\" }";
        var bois = new List<Boi> { JsonConvert.DeserializeObject<Boi>(jsn) };

        var newBoi = new NewBoi() { eeg = bois };

Although I would question the need for the NewBoi class - you could just work with the List.

Upvotes: 2

Related Questions