Question39170402 DataTable as dictionary

CSharp · Console

/Program.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.ComponentModel;
using System.Data;
using System.Xml.Serialization;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;


    class TestClass
    {
        static string GetJson()
        {
            var json = @"{
""R_3dSKpqkb0JuH0TW"":{""ResponseSet"":""Default Response Set"",""Name"":""John, Smith"",""ExternalDataReference"":""811221273"",""EmailAddress"":""[email protected]"",""IPAddress"":""123.232.12.21"",""Status"":"""",""StartDate"":""2015-07-06 11:10:26"",""EndDate"":""2015-07-06 11:10:55"",""Finished"":""1"",""RecipientEmail"":""[email protected]"",""RecipientLastName"":""John"",""RecipientFirstName"":""Smith"",""MI"":""Mia"",""EntryTerm"":"""",""Classification"":"""",""Type"":"""",""MajorCode"":"""",""Major"":"""",""DeptCode"":"""",""Dept"":"""",""College"":"""",""Age"":"""",""Ethnicity"":"""",""Gender"":"""",""CB1"":"""",""PIDM"":""71121027"",""Military"":"""",""OrientationDate"":""4\/7\/2016"",""H1"":1,""H2"":1,""H3"":2,""H4"":2,""H5"":"""",""Q1"":"""",""Q2"":"""",""Q3_1"":"""",""Q3_2"":"""",""Q3_3"":"""",""Q3_4"":"""",""Q3_5"":"""",""Q3_6"":"""",""Q3_7"":"""",""Q3_7_TEXT"":"""",""Q4_1"":"""",""Q4_2"":"""",""Q4_3"":"""",""Q4_4"":"""",""Q4_5"":"""",""Q4_6"":"""",""Q4_7"":"""",""Q4_8"":"""",""Q4_9"":"""",""Q4_10"":"""",""Q4_11"":"""",""Q4_12"":"""",""Q4_12_TEXT"":"""",""Q5"":"""",""Q5_TEXT"":"""",""Q6_1"":"""",""Q6_2"":"""",""Q6_3"":"""",""Q7"":"""",""Q8"":"""",""Q9"":"""",""Q10_1"":"""",""Q10_2"":"""",""Q10_3"":"""",""Q10_4"":"""",""Q11_1"":"""",""Q11_2"":"""",""Q11_3"":"""",""Q11_4"":"""",""Q12_1"":"""",""Q12_2"":"""",""Q12_3"":"""",""Q12_4"":"""",""Q13"":"""",""Q13_TEXT"":"""",""Q14"":"""",""Q14_TEXT"":"""",""Q15_1"":"""",""Q15_2"":"""",""Q15_3"":"""",""Q15_4"":"""",""Q15_5"":"""",""Q15_6"":"""",""Q15_7"":"""",""Q15_8"":"""",""Q16_1"":"""",""Q16_2"":"""",""Q16_3"":"""",""Q16_4"":"""",""Q16_5"":"""",""Q16_6"":"""",""Q16_7"":"""",""Q16_8"":"""",""Q17_1"":"""",""Q17_2"":"""",""Q17_3"":"""",""Q17_4"":"""",""Q17_5"":"""",""Q17_6"":"""",""H6"":"""",""Q18_1"":"""",""Q18_2"":"""",""Q18_3"":"""",""Q19_1"":"""",""Q19_2"":"""",""Q19_3"":"""",""Q19_4"":"""",""Q20"":"""",""Q21_1"":"""",""Q21_2"":"""",""Q22_1"":"""",""Q22_2"":"""",""Q23_1"":"""",""Q23_2"":"""",""Q23_3"":"""",""Q23_4"":"""",""Q24"":"""",""Q24_TEXT"":"""",""Q25"":"""",""Q26"":"""",""Q27"":"""",""Q28"":"""",""H7"":"""",""Q29_1"":"""",""Q29_2"":"""",""Q29_3"":"""",""Q29_4"":"""",""Q29_5"":"""",""Q30"":"""",""Q30_TEXT"":"""",""Q31"":"""",""Q31_TEXT"":"""",""Q32"":"""",""Q33_1"":"""",""Q33_2"":"""",""Q33_3"":"""",""Q33_4"":"""",""Q33_5"":"""",""Q33_6"":"""",""Q33_6_TEXT"":"""",""Q34"":"""",""Q34_TEXT"":"""",""Q35"":"""",""Q35_TEXT"":"""",""Q36_1"":"""",""Q36_2"":"""",""Q36_3"":"""",""Q36_4"":"""",""Q36_5"":"""",""Q36_6"":"""",""Q36_7"":"""",""Q36_7_TEXT"":"""",""Q37"":"""",""H8"":1,""H9"":1},

""R_1kYrTV300hwdvPP"":{""ResponseSet"":""Default Response Set"",""Name"":""priya, Sam"",""ExternalDataReference"":""8901212"",""EmailAddress"":""[email protected]"",""IPAddress"":""123.232.12.21"",""Status"":"""",""StartDate"":""2015-07-06 11:14:18"",""EndDate"":""2015-07-06 11:14:59"",""Finished"":""1"",""RecipientEmail"":""[email protected]"",""RecipientLastName"":""sam"",""RecipientFirstName"":""priya"",""MI"":"""",""EntryTerm"":"""",""Classification"":"""",""Type"":"""",""MajorCode"":"""",""Major"":"""",""DeptCode"":"""",""Dept"":"""",""College"":"""",""Age"":"""",""Ethnicity"":"""",""Gender"":"""",""CB1"":"""",""PIDM"":""71121028"",""Military"":"""",""OrientationDate"":""6\/27\/2016"",""H1"":1,""H2"":1,""H3"":2,""H4"":2,""H5"":"""",""Q1"":"""",""Q2"":"""",""Q3_1"":"""",""Q3_2"":"""",""Q3_3"":"""",""Q3_4"":"""",""Q3_5"":"""",""Q3_6"":"""",""Q3_7"":"""",""Q3_7_TEXT"":"""",""Q4_1"":"""",""Q4_2"":"""",""Q4_3"":"""",""Q4_4"":"""",""Q4_5"":"""",""Q4_6"":"""",""Q4_7"":"""",""Q4_8"":"""",""Q4_9"":"""",""Q4_10"":"""",""Q4_11"":"""",""Q4_12"":"""",""Q4_12_TEXT"":"""",""Q5"":"""",""Q5_TEXT"":"""",""Q6_1"":"""",""Q6_2"":"""",""Q6_3"":"""",""Q7"":"""",""Q8"":"""",""Q9"":"""",""Q10_1"":"""",""Q10_2"":"""",""Q10_3"":"""",""Q10_4"":"""",""Q11_1"":"""",""Q11_2"":"""",""Q11_3"":"""",""Q11_4"":"""",""Q12_1"":"""",""Q12_2"":"""",""Q12_3"":"""",""Q12_4"":"""",""Q13"":"""",""Q13_TEXT"":"""",""Q14"":"""",""Q14_TEXT"":"""",""Q15_1"":"""",""Q15_2"":"""",""Q15_3"":"""",""Q15_4"":"""",""Q15_5"":"""",""Q15_6"":"""",""Q15_7"":"""",""Q15_8"":"""",""Q16_1"":"""",""Q16_2"":"""",""Q16_3"":"""",""Q16_4"":"""",""Q16_5"":"""",""Q16_6"":"""",""Q16_7"":"""",""Q16_8"":"""",""Q17_1"":"""",""Q17_2"":"""",""Q17_3"":"""",""Q17_4"":"""",""Q17_5"":"""",""Q17_6"":"""",""H6"":"""",""Q18_1"":"""",""Q18_2"":"""",""Q18_3"":"""",""Q19_1"":"""",""Q19_2"":"""",""Q19_3"":"""",""Q19_4"":"""",""Q20"":"""",""Q21_1"":"""",""Q21_2"":"""",""Q22_1"":"""",""Q22_2"":"""",""Q23_1"":"""",""Q23_2"":"""",""Q23_3"":"""",""Q23_4"":"""",""Q24"":"""",""Q24_TEXT"":"""",""Q25"":"""",""Q26"":"""",""Q27"":"""",""Q28"":"""",""H7"":"""",""Q29_1"":"""",""Q29_2"":"""",""Q29_3"":"""",""Q29_4"":"""",""Q29_5"":"""",""Q30"":"""",""Q30_TEXT"":"""",""Q31"":"""",""Q31_TEXT"":"""",""Q32"":"""",""Q33_1"":"""",""Q33_2"":"""",""Q33_3"":"""",""Q33_4"":"""",""Q33_5"":"""",""Q33_6"":"""",""Q33_6_TEXT"":"""",""Q34"":"""",""Q34_TEXT"":"""",""Q35"":"""",""Q35_TEXT"":"""",""Q36_1"":"""",""Q36_2"":"""",""Q36_3"":"""",""Q36_4"":"""",""Q36_5"":"""",""Q36_6"":"""",""Q36_7"":"""",""Q36_7_TEXT"":"""",""Q37"":"""",""H8"":1,""H9"":1}
}";
            return json;
        }

        internal static void Test()
        {
            var json = GetJson();

            TestWithKeys(json);

            TestWithoutKeys(json);
        }

        private static void TestWithoutKeys(string json)
        {
            var obj = JObject.Parse(json);
            var array = new JArray(obj.Values());

            var dt = array.ToObject<DataTable>();

            Console.WriteLine("Deserialized and re-serialized DataTable: ");
            Console.WriteLine(JsonConvert.SerializeObject(dt, Formatting.Indented));
        }

        private static void TestWithKeys(string json)
        {
            var obj = JObject.Parse(json);
            string keyColumnName = "__key";
            var query = from p in obj.Properties()
                        select new JObject(p.Value.OfType<JProperty>().Concat(new [] { new JProperty(keyColumnName, p.Name) }));
            var array = new JArray(query);
            var dt = array.ToObject<DataTable>();

            Console.WriteLine("Deserialized and re-serialized DataTable with key included: ");
            Console.WriteLine(JsonConvert.SerializeObject(dt, Formatting.Indented));
        }
    }

	public class Program
	{
		public static void Main()
		{
            Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
            Console.WriteLine("");
			
			TestClass.Test();
		}
	}
;