using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
var jsonFromAPI = "{\"api\":{\"results\":66,\"Players\":[{\"player_id\":10,\"player_name\":\"Gustavo Ferrareis\",\"shots\":{\"total\":13, \"on\":2 }},{\"player_id\":20,\"player_name\":\"Player Name With Id 20\",\"shots\":{\"total\":13, \"on\":2 }}]}}";
var jObject = JObject.Parse(jsonFromAPI)["api"];
var players = jObject["Players"].Children();
var formattedPlayers = players
.Select(p => string.Format("Player_id: {0} - Player_name: {1}", p["player_id"], p["player_name"]));
var playersDictionary = players.Select(p => new {player_id = p["player_id"], player_name = p["player_name"]})
.ToDictionary(x => x.player_id, v => v.player_name);
Console.WriteLine(string.Join(Environment.NewLine, formattedPlayers));
Console.WriteLine(Environment.NewLine);
var allPlayerDetails = new List<Dictionary<string, object>>();
foreach (JObject player in players)
var playerDictionary = player.Properties()
.ToDictionary<JProperty, string, object>(property => property.Name, property => property.Value);
allPlayerDetails.Add(playerDictionary);
for (var index = 0; index < allPlayerDetails.Count; index++)
var playerDictionary = allPlayerDetails[index];
Console.WriteLine(Environment.NewLine);
Console.WriteLine(string.Format("Printing Player# {0}", index));
foreach (var d in playerDictionary)
Console.WriteLine(d.Key + " - " + d.Value);
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Beginning to convert list to DataTable");
DataTable dt = new DataTable();
foreach (var column in allPlayerDetails.SelectMany(p => p.Keys).Select(k => k.Trim()).Distinct())
dt.Columns.Add(new DataColumn(column));
foreach (var details in allPlayerDetails)
foreach (DataColumn dc in dt.Columns)
dr[dc.ColumnName] = details.ContainsKey(dc.ColumnName) ? details[dc.ColumnName] : null;
Console.WriteLine("Completed converting list to DataTable");