biancucci_
biancucci_

Reputation: 5

Mapping a Json response from an API to a Model

I have a response from an API that looks like this

{
    "Global": {
        "NewConfirmed": 53041,
        "TotalConfirmed": 2142221,
        "NewDeaths": 3583,
        "TotalDeaths": 168885,
        "NewRecovered": 40194,
        "TotalRecovered": 1005926
    },
    "Countries": [
        {
            "Country": "ALA Aland Islands",
            "CountryCode": "AX",
            "Slug": "ala-aland-islands",
            "NewConfirmed": 0,
            "TotalConfirmed": 0,
            "NewDeaths": 0,
            "TotalDeaths": 0,
            "NewRecovered": 0,
            "TotalRecovered": 0,
            "Date": "2020-05-03T17:59:05Z"
        },
        {
            "Country": "Afghanistan",
            "CountryCode": "AF",
            "Slug": "afghanistan",
            "NewConfirmed": 134,
            "TotalConfirmed": 2469,
            "NewDeaths": 4,
            "TotalDeaths": 72,
            "NewRecovered": 21,
            "TotalRecovered": 331,
            "Date": "2020-05-03T17:59:05Z"
        },
        {
            "Country": "Albania",
            "CountryCode": "AL",
            "Slug": "albania",
            "NewConfirmed": 7,
            "TotalConfirmed": 789,
            "NewDeaths": 0,
            "TotalDeaths": 31,
            "NewRecovered": 31,
            "TotalRecovered": 519,
            "Date": "2020-05-03T17:59:05Z"
        }
}

I need to map the result my Model class that looks like this

 public class Cases
    {
        public class Global
        {
            [JsonProperty("NewConfirmed")]
            public int NewConfirmed { get; set; }

            [JsonProperty("TotalConfirmed")]
            public int TotalConfirmed { get; set; }

            [JsonProperty("NewDeaths")]
            public int NewDeaths { get; set; }

            [JsonProperty("TotalDeaths")]
            public int TotalDeaths { get; set; }

            [JsonProperty("NewRecovered")]
            public int NewRecovered { get; set; }

            [JsonProperty("TotalRecovered")]
            public int TotalRecovered { get; set; }

            [JsonProperty("Countries")]
            public Country[] countries { get; set; }
        }

        public class Country
        {
            [JsonProperty("Country")]
            public string country { get; set; }

            [JsonProperty("CountryCode")]
            public string countryCode { get; set; }


            [JsonProperty("NewConfirmed")]
            public int NewConfirmed { get; set; }

            [JsonProperty("TotalConfirmed")]
            public int TotalConfirmed { get; set; }

            [JsonProperty("NewDeaths")]
            public int NewDeaths { get; set; }

            [JsonProperty("TotalDeaths")]
            public int TotalDeaths { get; set; }

            [JsonProperty("NewRecovered")]
            public int NewRecovered { get; set; }

            [JsonProperty("TotalRecovered")]
            public int TotalRecovered { get; set; }


        }
        public class Countries
        {
            [JsonProperty("Global")]
            public Cases.Global global { get; set; }

            [JsonProperty("Countries")]
            public Country[] countries { get; set; }
        }

    }

A have a void Get method that looks like this:

 //create a web request object
                WebRequest reqObject = WebRequest.Create(apiUrl);

                //request method
                reqObject.Method = "GET";

                //create a response object
                HttpWebResponse httpWebResponseObj = (HttpWebResponse)reqObject.GetResponse();

                //capture the response stream            
                using (Stream stream = httpWebResponseObj.GetResponseStream())
                {
                    //stream reader -> pass in stream
                    StreamReader streamReader = new StreamReader(stream);

                    //grab the stream response and put it in a strign variable
                    string readResponse = streamReader.ReadToEnd();

                    //close the streamreader
                    streamReader.Close();

                    //deserialize stream reader
                    var deserializedObj = JsonConvert.DeserializeObject<Cases>(readResponse);

                   //foreach here

                }

I'm just not sure where to go from here. Can anyone point me in the right direction? Also, if you could confirm that the model class is correct, I'd appreciate it. Thank you

Upvotes: 0

Views: 68

Answers (1)

Olivier Depriester
Olivier Depriester

Reputation: 1625

I don't like inner classes so my thought is that the model should be :

public class Cases
{
    // "Global" section
    [JsonProperty("Global")]
    public Global Global { get; set; }

    // "Countries" : list of Country
    [JsonProperty("Countries")]
    public List<Country> Countries { get; set; }
}

public class Global
{
    [JsonProperty("NewConfirmed")]
    public int NewConfirmed { get; set; }

    [JsonProperty("TotalConfirmed")]
    public int TotalConfirmed { get; set; }

    [JsonProperty("NewDeaths")]
    public int NewDeaths { get; set; }

    [JsonProperty("TotalDeaths")]
    public int TotalDeaths { get; set; }

    [JsonProperty("NewRecovered")]
    public int NewRecovered { get; set; }

    [JsonProperty("TotalRecovered")]
    public int TotalRecovered { get; set; }
}


// !!! You did not map "Slug" and "Date" !!!
public class Country
{

    [JsonProperty("Country")]
    public string country { get; set; }

    [JsonProperty("CountryCode")]
    public string countryCode { get; set; }

    [JsonProperty("NewConfirmed")]
    public int NewConfirmed { get; set; }

    [JsonProperty("TotalConfirmed")]
    public int TotalConfirmed { get; set; }

    [JsonProperty("NewDeaths")]
    public int NewDeaths { get; set; }

    [JsonProperty("TotalDeaths")]
    public int TotalDeaths { get; set; }

    [JsonProperty("NewRecovered")]
    public int NewRecovered { get; set; }

    [JsonProperty("TotalRecovered")]
    public int TotalRecovered { get; set; }
}

Upvotes: 1

Related Questions