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.
Author by
Krasen Vachev
Updated on June 14, 2022Comments
-
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 }