Saturday, 24 June 2017

c# - Can't deserialize json properly



I have this json:



[{"trace":{"details":{"date":"[28-02-2016 11:04:26.856573]","type":"[info]","message":"[system done.]"},"context":{"context":[[{"ID":"john dillinger"}]]}}},{"trace":{"details":{"date":"[28-02-2016 11:04:26.856728]","type":"[info]","message":"[trace done.]"},"context":{"context":[[{"ID":"john dillinger"}]]}}}]



Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type, because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.





I've created this class for deserialize it:



public class Testing
{
public string date { get; set; }
public string type { get; set; }
public string message { get; set; }
public string context { get; set; }
}



and this is the code for deserialize the content:



string responseText = "json above";
var obj = JsonConvert.DeserializeObject(responseText); //on this line the problem


in the obj line I get the exception. I'm a bit rusty with c# so I don't know exactly what am I doing wrong. Someone could enlighten me?


Answer




You need to deserialize a collection of Trace - like List:



var obj = JsonConvert.DeserializeObject>(responseText);


Assuming that you have the following DTOs:



public class Trace
{
public TraceValue trace;

}

public class TraceValue
{
public Details details;
public Context context;
}

public class Details
{

public String date;
public String type;
public String message;
}

public class Context
{
public List> context;
}


public class IdItem
{
public String ID;
}


Proof (response is just a line provided by you, but with escaped quotes, so that it can be put directly into the code):



var response = 
"[{ \"trace\":{ \"details\":{ \"date\":\"[28-02-2016 11:04:26.856573]\",\"type\":\"[info]\",\"message\":\"[system done.]\"},\"context\":{ \"context\":[[{\"ID\":\"john dillinger\"}]]}}},{\"trace\":{\"details\":{\"date\":\"[28-02-2016 11:04:26.856728]\",\"type\":\"[info]\",\"message\":\"[trace done.]\"},\"context\":{\"context\":[[{\"ID\":\"john dillinger\"}]]}}}]";

var obj = JsonConvert.DeserializeObject>(response);

No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...