I am stuck on parsing JSon and can't figure it out. It gives me NULL at the array of IDictionary. Here is what I have:
{
"response" : {
"method" : "my.current.method",
"result" : {
"current_calls" : {
"current_call" : [
{
"provider" : "ABC",
"start_time" : "2014-11-30 02:24:52",
"duration" : "5",
"to_caller_id_number" : "800",
"state" : "ivr",
"from_caller_id_name" : "<unknown>",
"to_caller_id_name" : "Main Answer Queue",
"format" : "ulaw",
"from_caller_id_number" : "1234567890",
"id" : "SIP/1234567890-08682a00"
},
{
"provider" : "ThinkTel",
"start_time" : "2014-11-30 02:24:50",
"duration" : "7",
"to_caller_id_number" : "800",
"state" : "ivr",
"from_caller_id_name" : "<unknown>",
"to_caller_id_name" : "Main Answer Queue",
"format" : "ulaw",
"from_caller_id_number" : "0123456789",
"id" : "SIP/0123456789-08681350"
}
],
"total_items" : "2"
}
}
}
}
Then I have the following in my C# code:
public class Data
{
public Response response { get; set; }
}
public class Response
{
public string method { get; set; }
public Result result { get; set; }
}
public class Result
{
public CurrentCalls current_calls { get; set; }
}
public class CurrentCalls
{
public List<IDictionary<string, Current_call>> current_calls { get; set; }
public int total_items { get; set; }
}
public class Current_call
{
public string provider { get; set; }
public DateTime start_time { get; set; }
public int duration { get; set; }
public string to_caller_id_number { get; set; }
public string state { get; set; }
public string from_caller_id_name { get; set; }
public string to_caller_id_name { get; set; }
public string format { get; set; }
public string from_caller_id_number { get; set; }
public string id { get; set; }
}
public class Data
{
public Response response { get; set; }
}
public class Response
{
public string method { get; set; }
public Result result { get; set; }
}
public class Result
{
public CurrentCalls current_calls { get; set; }
}
public class CurrentCalls
{
public List<IDictionary<string, Current_call>> current_calls { get; set; }
public int total_items { get; set; }
}
public class Current_call
{
public string provider { get; set; }
public DateTime start_time { get; set; }
public int duration { get; set; }
public string to_caller_id_number { get; set; }
public string state { get; set; }
public string from_caller_id_name { get; set; }
public string to_caller_id_name { get; set; }
public string format { get; set; }
public string from_caller_id_number { get; set; }
public string id { get; set; }
}
And i deserialize it like this:
allCalls = JsonConvert.DeserializeObject<Data>(json);
Then I am trying to use this in the following:
if (parser.allCalls.response.result.current_calls.current_calls != null)
{
foreach (var defindex in parser.allCalls.response.result.current_calls.current_calls)
{
foreach (var call in defindex) {
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\A\\Testing\\test" + i + ".txt");
file.WriteLine("Current call:" );
file.WriteLine("\t Provider: " + call.Value.provider);
file.WriteLine("\t Start Tine: " + call.Value.start_time);
file.WriteLine("\t Duration: " + call.Value.duration);
file.WriteLine("\t To Caller: " + call.Value.to_caller_id_number);
file.WriteLine("\t State: " + call.Value.state);
file.WriteLine("\t From: " + call.Value.from_caller_id_name);
file.WriteLine("\t To Name: " + call.Value.to_caller_id_name);
file.WriteLine("\t Format: " + call.Value.format);
file.WriteLine("\t From Caller ID: " + call.Value.from_caller_id_number);
file.WriteLine("\t ID: " + call.Value.id);
file.Close();
}
}
}
So Total Items gets value 2 ok. I can't seem to figure the array of IDictionary. It comes null. Please help. (This is using Newtonsoft btw)
Here's a working dotNetFiddle: https://dotnetfiddle.net/3UpWwO
Wait for a few seconds after you load the fiddle page and look at the Console output pane at the bottom.
Here's the complete code to the solution.
Please note, you can use
JsonProperty
on your POCOs so that you get rid of_
underscores and lowercasing etc in your C# classes.Ex: