c# deserializing JSON web api response

10,987

Solution 1

You need to specify which property of your json corresponds to your model.

MyData tmp = JsonConvert.DeserializeObject<MyData>((JObject.Parse(responseFromServer)["block4o"]).ToString());

Solution 2

If you define the class

public class Response
{
  public MyData Block4o { get; set; }
}

and deserialize as Response, you should get the desired result.

Share:
10,987
Krasen Vachev
Author by

Krasen Vachev

Updated on June 14, 2022

Comments

  • Krasen Vachev
    Krasen Vachev almost 2 years

    I need a little help from somebody who can tell me where my mistake is.
    I have an API which returns JSON code:

    {"block4o": {
       "id": 20153910,
       "name": "Block4o",
       "profileIconId": 616,
       "revisionDate": 1408967362000,
       "summonerLevel": 30
    }}
    

    I tried to desearialize it but without success. I am using NewtonSoft.Json from NuGet. Here is my code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Net;
    using Newtonsoft.Json;
    
    namespace ConsoleApplication37
    {
        class Program
        {
    
            class MyData
            {
                public long id { get; set; }
                public string name { get; set; }
                public int profileIconId { get; set; }
                public long revisionDate { get; set; }
                public long summonerLevel { get; set; }
            }
    
            static void Main()
            {
                WebRequest request = WebRequest.Create(
                  "https://eune.api.pvp.net/api/lol/eune/v1.4/summoner/by-name/Block4o?api_key=****");
                request.Credentials = CredentialCache.DefaultCredentials;
                WebResponse response = request.GetResponse();
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                Console.WriteLine(responseFromServer);
                reader.Close();
                response.Close();
                Console.ReadKey();
    
                MyData tmp = JsonConvert.DeserializeObject<MyData>(responseFromServer);
                Console.WriteLine("{0}",tmp.id);
                Console.ReadKey();
            }
    
        }
    }
    

    P.S It works if the response is like this:

    {
       "id": 20153910,
       "name": "Block4o",
       "profileIconId": 616,
       "revisionDate": 1408967362000,
       "summonerLevel": 30
    }