CSharp · Console
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters;
using System.IO;
using System.Data;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using NUnit.Framework; // Throws NUnit.Framework.AssertionException
//https://stackoverflow.com/questions/33399749/convert-a-data-row-to-a-json-object/33400729#33400729
public class TestClass
{
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""}}");
table.Rows.Add(row);
row = table.NewRow();
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""}}");
table.Rows.Add(row);
row = table.NewRow();
row["America"] = null;
row["Africa"] = JsonConvert.DeserializeObject<Place>(@"{""Id"":13,""Title"":""EG""}");
row["Japan"] = null;
table.Rows.Add(row);
return table;
}
public static void Test()
{
var datatable = MakeTable();
for (int rowIndex = 0; rowIndex < datatable.Rows.Count; rowIndex++)
{
var row = datatable.Rows[rowIndex];
var rowJson = JsonConvert.SerializeObject(
row.Table.Columns.Cast<DataColumn>()
.ToDictionary(c => c.ColumnName, c => row.IsNull(c) ? null : row[c]),
Formatting.Indented);
Console.WriteLine("JSON for row {0}:", rowIndex);
Console.WriteLine(rowJson);
}
}
}
public class Values
{
public int ValID { get; set; }
public string Type { get; set; }
}
public class Place
{
public int Id { get; set; }
public string Title { get; set; }
public Values Values { get; set; }
}
public class Program
{
public static void Main()
{
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine();
try
{
TestClass.Test();
}
catch (Exception ex)
{
Console.WriteLine("Failed with unhandled exception: ");
Console.WriteLine(ex);
throw;
}
}
}