using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
static DataTable MakeTable()
var table = new DataTable();
table.Columns.Add("America", typeof(Place));
table.Columns.Add("Africa", typeof(Place));
table.Columns.Add("Japan", typeof(Place));
DataRow row = table.NewRow();
row["America"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":1,""Title"":""Ka""}");
row["Africa"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":2,""Title"":""Sf""}");
row["Japan"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":3,""Title"":""Ja"",""Values"":{""ValID"":4,""Type"":""Okinawa""}}");
row["America"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":4,""Title"":""CT""}");
row["Africa"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":5,""Title"":""SA""}");
row["Japan"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":6,""Title"":""Ja"",""Values"":{""ValID"":4,""Type"":""Tokyo""}}");
public static void Test()
var datatable = MakeTable();
for (int rowIndex = 0; rowIndex < datatable.Rows.Count; rowIndex++)
var jArray = JArray.FromObject(datatable, JsonSerializer.CreateDefault(new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
var rowJToken = jArray[rowIndex];
var rowJson = rowJToken.ToString(Formatting.Indented);
Console.WriteLine("JSON for row {0}:", rowIndex);
Console.WriteLine(rowJson);
public int ValID { get; set; }
public string Type { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public Values Values { get; set; }
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");