using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class RecordDataTableConverter : Newtonsoft.Json.Converters.DataTableConverter
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
if (reader.TokenType == JsonToken.StartObject)
var token = JToken.Load(reader);
token = new JArray(token.SelectTokens("records[*].record"));
using (var subReader = token.CreateReader())
while (subReader.TokenType == JsonToken.None)
return base.ReadJson(subReader, objectType, existingValue, serializer);
return base.ReadJson(reader, objectType, existingValue, serializer);
var json = @"{""records"":[{""record"":{""Ch_ID"":""27"",""User_id"":""1"",""Ch_Name"":""test1"",""Ch_Description"":""test1description"",""Ch_Starttime"":""""}},{""record"":{""Ch_ID"":""29"",""User_id"":""1"",""Ch_Name"":""w"",""Ch_Description"":""ww"",""Ch_Starttime"":""12""}},{""record"":{""Ch_ID"":""30"",""User_id"":""1"",""Ch_Name"":""qq"",""Ch_Description"":""qqqdescription"",""Ch_Starttime"":""1222""}},{""record"":{""Ch_ID"":""31"",""User_id"":""1"",""Ch_Name"":""v"",""Ch_Description"":""vv"",""Ch_Starttime"":""1""}},{""record"":{""Ch_ID"":""32"",""User_id"":""1"",""Ch_Name"":""n"",""Ch_Description"":""nnnn"",""Ch_Starttime"":""111""}}]} ";
public static void Test()
Console.WriteLine("Original JSON: ");
var settings = new JsonSerializerSettings
Formatting = Formatting.Indented,
Converters = new[] { new RecordDataTableConverter() },
var table = JsonConvert.DeserializeObject<DataTable>(json, settings);
var json2 = JsonConvert.SerializeObject(table, settings);
Console.WriteLine("\nRe-serialized data table: ");
Console.WriteLine(json2);
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);