using ChoETL; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Windows.Documents; namespace Middleware_Codebash_to_Healthstream { internal class Program { static void Main(string[] args) { string fileName = ConfigurationManager.AppSettings["JsonInput"]; string FileOut = ConfigurationManager.AppSettings["CsvOutput"]; string HealthStreamOut = ConfigurationManager.AppSettings["ImporterOut"]; string json = File.ReadAllText(fileName); JArray a = JArray.Parse(json); List list = new List(); foreach (JObject content in a.Children()) { list.Add(new FieldListing() { uid = content["uid"].ToString(), email = content["email"].ToString(), java_completed_percentage = Convert.ToDouble(content["java.completed_percentage"]), java_completed_date = content["java.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), dotnet_completed_percentage = Convert.ToDouble(content["dotnet.completed_percentage"]), dotnet_completed_date = content["dotnet.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), php_completed_percentage = Convert.ToDouble(content["php.completed_percentage"]), php_completed_date = content["php.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), nodejs_completed_percentage = Convert.ToDouble(content["nodejs.completed_percentage"]), nodejs_completed_date = content["nodejs.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), ruby_completed_percentage = Convert.ToDouble(content["ruby.completed_percentage"]), python_advanced_completed_date = content["ruby.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), python_advanced_completed_percentage = Convert.ToDouble(content["python.completed_percentage"]), python_completed_date = content["python.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), scala_completed_percentage = Convert.ToDouble(content["scala.completed_percentage"]), scala_completed_date = content["scala.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), cplus_completed_percentage = Convert.ToDouble(content["cplus.completed_percentage"]), cplus_completed_date = content["cplus.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), ios_completed_percentage = Convert.ToDouble(content["ios.completed_percentage"]), ios_completed_date = content["ios.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), android_completed_percentage = Convert.ToDouble(content["android.completed_percentage"]), android_completed_date = content["android.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), go_completed_percentage = Convert.ToDouble(content["go.completed_percentage"]), go_completed_date = content["go.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), frontend_completed_percentage = Convert.ToDouble(content["frontend.completed_percentage"]), frontend_completed_date = content["frontend.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), http_completed_percentage = Convert.ToDouble(content["http.completed_percentage"]), http_completed_date = content["http.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), java_advanded_lessons_completed_percentage = Convert.ToDouble(content["java_advanced_lessons.completed_percentage"]), java_advanded_lessons_completed_date = content["java_advanced_lessons.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), hacking_headlines_completed_percentage = Convert.ToDouble(content["hacking_headlines.completed_percentage"]), hacking_headlines_completed_date = content["hacking_headlines.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), dotnet_advanded_lessons_completed_percentage = Convert.ToDouble(content["dotnet_advanced_lessons.completed_percentage"]), dotnet_advanded_lessons_completed_date = content["dotnet_advanced_lessons.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), backend_java_completed_percentage = Convert.ToDouble(content["backend_java.completed_percentage"]), backend_java_completed_date = content["backend_java.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), source_codes_completed_percentage = Convert.ToDouble(content["source_codes.completed_percentage"]), source_codes_completed_date = content["source_codes.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), angular_completed_percentage = Convert.ToDouble(content["angular.completed_percentage"]), angular_completed_date = content["angular.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), python_advanded_lessons_completed_percentage = Convert.ToDouble(content["python_advanced_lessons.completed_percentage"]), python_advanded_lessons_completed_date = content["python_advanced_lessons.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), angular_js_completed_percentage = Convert.ToDouble(content["angular_js.completed_percentage"]), angular_js_completed_date = content["angular_js.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), dotnet_api_security_completed_percentage = Convert.ToDouble(content["dotnet_api_security.completed_percentage"]), dotnet_api_security_completed_date = content["dotnet_api_security.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), java_api_security_completed_percentage = Convert.ToDouble(content["java_api_security.completed_percentage"]), java_api_security_completed_date = content["java_api_security.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), appsec_for_qa_completed_percentage = Convert.ToDouble(content["appsec_for_qa.completed_percentage"]), appsec_for_qa_completed_date = content["appsec_for_qa.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), appsec_for_decision_makers_completed_percentage = Convert.ToDouble(content["appsec_for_decision_makers.completed_percentage"]), appsec_for_decision_makers_completed_date = content["appsec_for_decision_makers.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), java_advanced_lessons2_completed_percentage = Convert.ToDouble(content["java_advanced_lessons.completed_percentage"]), java_advanced_lessons2_completed_date = content["java_advanced_lessons.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), dotnet_advanded_lessons2_completed_percentage = Convert.ToDouble(content["dotnet_advanced_lessons2.completed_percentage"]), dotnet_advanded_lessons2_completed_date = content["dotnet_advanced_lessons2.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), python_advanded_lessons2_completed_percentage = Convert.ToDouble(content["python_advanced_lessons2.completed_percentage"]), python_advanded_lessons2_completed_date = content["python_advanced_lessons2.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), react_completed_percentage = Convert.ToDouble(content["react.completed_percentage"]), react_completed_date = content["react.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), php_advanded_lessons_completed_percentage = Convert.ToDouble(content["php_advanced_lessons.completed_percentage"]), php_advanded_lessons_completed_date = content["php_advanced_lessons.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), iac_security_completed_percentage = Convert.ToDouble(content["iac_security.completed_percentage"]), iac_security_completed_date = content["iac_security.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), backend_php_completed_percentage = Convert.ToDouble(content["backend_php.completed_percentage"]), backend_php_completed_date = content["backend_php.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), backend_scala_completed_percentage = Convert.ToDouble(content["backend_scala.completed_percentage"]), backend_scala_completed_date = content["backend_scala.completed_date"].ToString().FormatString("MM-DD-YYYY").ToString(), completed_percentage = Convert.ToDouble(content["completed_percentage"]) } ); } WriteCSV(list, FileOut.ToString()); // Pull values of CSV file in and output as required format var dt = ConvertCSVtoDataTable(FileOut.ToString()); List cols = new List(); foreach (DataColumn item in dt.Columns) { cols.Add(item.ColumnName); } DataView view1 = new DataView(dt); #region Field Matrix Documentation /* Matrix of Fields by index * 0 activated * 1 android_completed_date * 2 android_completed_percentage * 3 angular_completed_date * 4 angular_completed_percentage * 5 angular_js_completed_date * 6 angular_js_completed_percentage * 7 appsec_for_decision_makers_completed_date * 8 appsec_for_decision_makers_completed_percentage * 9 appsec_for_qa_completed_date * 10 appsec_for_qa_completed_percentage * 11 assigned_completed_lessons_count * 12 assigned_lessons_count * 13 backend_java_completed_date * 14 backend_java_completed_percentage * 15 backend_php_completed_date * 16 backend_php_completed_percentage * 17 backend_python_completed_date * 18 backend_python_completed_percentage * 19 backend_scala_completed_date * 20 backend_scala_completed_percentage * 21 completed_lessons_count * 22 completed_percentage * 23 confirmed_at * 24 cplus_completed_date * 25 cplus_completed_percentage * 26 dotnet_advanded_lessons_completed_date * 27 dotnet_advanded_lessons_completed_percentage * 28 dotnet_advanded_lessons2_completed_date * 29 dotnet_advanded_lessons2_completed_percentage * 30 dotnet_api_security_completed_date * 31 dotnet_api_security_completed_percentage * 32 dotnet_completed_date * 33 dotnet_completed_percentage * 34 email * 35 frontend_completed_date * 36 frontend_completed_percentage * 37 go_completed_date * 38 go_completed_percentage * 39 hacking_headlines_completed_date * 40 hacking_headlines_completed_percentage * 41 http_completed_date * 42 http_completed_percentage * 43 iac_security_completed_date * 44 iac_security_completed_percentage * 45 ios_completed_date * 46 ios_completed_percentage * 47 java_advanced_lessons2_completed_date * 48 java_advanced_lessons2_completed_percentage * 49 java_advanded_lessons_completed_date * 50 java_advanded_lessons_completed_percentage * 51 java_api_security_completed_date * 52 java_api_security_completed_percentage * 53 java_completed_date * 54 java_completed_percentage * 55 last_active_at * 56 nodejs_completed_date * 57 nodejs_completed_percentage * 58 php_advanded_lessons_completed_date * 59 php_advanded_lessons_completed_percentage * 60 php_completed_date * 61 php_completed_percentage * 62 primary_and_assigned_completed_lessons_count * 63 primary_and_assigned_lessons_count * 64 primary_course_completed_lessons_count * 65 primary_course_display_name * 66 primary_course_lessons_count * 67 primary_course_name * 68 primary_course_started_at * 69 python_advanced_completed_date * 70 python_advanced_completed_percentage * 71 python_advanded_lessons_completed_date * 72 python_advanded_lessons_completed_percentage * 73 python_advanded_lessons2_completed_date * 74 python_advanded_lessons2_completed_percentage * 75 python_completed_date * 76 react_completed_date * 77 react_completed_percentage * 78 role * 79 ruby_completed_percentage * 80 scala_completed_date * 81 scala_completed_percentage * 82 sign_in_count * 83 source_codes_completed_date * 84 source_codes_completed_percentage * 85 training_completion_rate * 86 uid */ #endregion #region Table Assignments // skip active field DataTable table1 = view1.ToTable("Table1", true, cols.Take(1).ToArray()); // Android 2 & 3 DataTable table2 = view1.ToTable("Table2", true, cols.Skip(1).Take(2).ToArray()); // Angular 4 & 5 DataTable table3 = view1.ToTable("Table3", true, cols.Skip(3).Take(2).ToArray()); // Angular JS 6 & 7 DataTable table4 = view1.ToTable("Table4", true, cols.Skip(5).Take(2).ToArray()); // Appsec For Decision Makers 8 & 9 DataTable table5 = view1.ToTable("Table5", true, cols.Skip(7).Take(2).ToArray()); // Appsec For QA 10 & 11 DataTable table6 = view1.ToTable("Table6", true, cols.Skip(9).Take(2).ToArray()); // Backend Java 12 & 13 DataTable table7 = view1.ToTable("Table7", true, cols.Skip(13).Take(2).ToArray()); // Backend PHP DataTable table8 = view1.ToTable("Table8", true, cols.Skip(15).Take(2).ToArray()); // Backend Python DataTable table9 = view1.ToTable("Table9", true, cols.Skip(17).Take(2).ToArray()); // CPlus DataTable table10 = view1.ToTable("Table10", true, cols.Skip(24).Take(2).ToArray()); // Dotnet Advanced Lessons DataTable table11 = view1.ToTable("Table11", true, cols.Skip(26).Take(2).ToArray()); // Dotnet Advanced Lessons 2 DataTable table12 = view1.ToTable("Table12", true, cols.Skip(28).Take(2).ToArray()); // Dotnet API Security DataTable table13 = view1.ToTable("Table13", true, cols.Skip(30).Take(2).ToArray()); // Dotnet DataTable table14 = view1.ToTable("Table14", true, cols.Skip(32).Take(2).ToArray()); // Email Address DataTable table15 = view1.ToTable("Table15", true, cols.Skip(34).Take(1).ToArray()); // Frontend DataTable table16 = view1.ToTable("Table16", true, cols.Skip(35).Take(2).ToArray()); // Go DataTable table17 = view1.ToTable("Table17", true, cols.Skip(37).Take(2).ToArray()); // Hacking Headlines DataTable table18 = view1.ToTable("Table18", true, cols.Skip(39).Take(2).ToArray()); // HTTP DataTable table19 = view1.ToTable("Table19", true, cols.Skip(41).Take(2).ToArray()); // IAC Security DataTable table20 = view1.ToTable("Table20", true, cols.Skip(43).Take(2).ToArray()); // IOS DataTable table21 = view1.ToTable("Table21", true, cols.Skip(45).Take(2).ToArray()); // Java Advanced Lessons 2 DataTable table22 = view1.ToTable("Table22", true, cols.Skip(47).Take(2).ToArray()); // Java Advanced Lessons DataTable table23 = view1.ToTable("Table23", true, cols.Skip(49).Take(2).ToArray()); // Java API Security DataTable table24 = view1.ToTable("Table24", true, cols.Skip(51).Take(2).ToArray()); // Java DataTable table25 = view1.ToTable("Table25", true, cols.Skip(53).Take(2).ToArray()); // NodeJS DataTable table26 = view1.ToTable("Table26", true, cols.Skip(56).Take(2).ToArray()); // PHP Advanced Lessons DataTable table27 = view1.ToTable("Table27", true, cols.Skip(58).Take(2).ToArray()); // PHP DataTable table28 = view1.ToTable("Table28", true, cols.Skip(60).Take(2).ToArray()); // Python Advanced DataTable table32 = view1.ToTable("Table32", true, cols.Skip(69).Take(2).ToArray()); // Python Advanced Lessons DataTable table33 = view1.ToTable("Table33", true, cols.Skip(71).Take(2).ToArray()); // Python Advanced Lessons 2 DataTable table34 = view1.ToTable("Table34", true, cols.Skip(73).Take(2).ToArray()); // React DataTable table35 = view1.ToTable("Table35", true, cols.Skip(76).Take(2).ToArray()); // Scala DataTable table36 = view1.ToTable("Table36", true, cols.Skip(80).Take(2).ToArray()); // Source Codes DataTable table37 = view1.ToTable("Table37", true, cols.Skip(83).Take(2).ToArray()); #endregion #region Create List Entries List List = new List(); foreach (DataRow item in table2.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[1].Replace("_course_score", " ") }); } foreach (DataRow item in table3.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table4.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table5.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table6.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table7.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table8.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table9.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table10.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table11.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table12.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table13.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table14.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table16.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table17.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table18.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table19.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table20.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table21.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table22.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table23.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table24.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table25.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table26.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table27.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table28.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table32.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table33.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table34.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table35.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table36.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (DataRow item in table37.Rows) { List.Add(new Info { Email = table15.Rows[0][0].ToString(), Score = item[0].ToString(), completeddate = item[1].ToString().Trim(), Course = cols[3].Replace("_course_score", " ") }); } foreach (var item in List) { // ConvertCSVtoDataTable(HealthStreamOut.ToString()); File.AppendAllText(HealthStreamOut, item.Email + "," + item.Course + "," + item.Score + "," + item.completeddate + "\n"); // Console.WriteLine(item.Email + "," + item.Course + "," + item.Score + "," + item.completeddate); } } #endregion public static void WriteCSV(IEnumerable items, string path) { Type itemType = typeof(T); var props = itemType.GetProperties(BindingFlags.Public | BindingFlags.Instance) .OrderBy(p => p.Name); using (var writer = new StreamWriter(path)) { writer.WriteLine(string.Join(", ", props.Select(p => p.Name))); foreach (var item in items) { writer.WriteLine(string.Join(", ", props.Select(p => p.GetValue(item, null)))); } } } public static DataTable ConvertCSVtoDataTable(string strFilePath) { DataTable dt = new DataTable(); using (StreamReader sr = new StreamReader(strFilePath)) { string[] headers = sr.ReadLine().Split(','); foreach (string header in headers) { dt.Columns.Add(header); } while (!sr.EndOfStream) { string[] rows = sr.ReadLine().Split(','); DataRow dr = dt.NewRow(); for (int i = 0; i < headers.Length; i++) { dr[i] = rows[i]; } dt.Rows.Add(dr); } } return dt; } public class FieldListing { public string uid { get; set; } public string email { get; set; } public string role { get; set; } public string confirmed_at { get; set; } public int sign_in_count { get; set; } public string last_active_at { get; set; } public bool activated { get; set; } public double training_completion_rate { get; set; } public int assigned_lessons_count { get; set; } public int assigned_completed_lessons_count { get; set; } public int completed_lessons_count { get; set; } public int primary_and_assigned_lessons_count { get; set; } public int primary_and_assigned_completed_lessons_count { get; set; } public string primary_course_name { get; set; } public string primary_course_display_name { get; set; } public string primary_course_started_at { get; set; } public int primary_course_lessons_count { get; set; } public int primary_course_completed_lessons_count { get; set; } public double java_completed_percentage { get; set; } public string java_completed_date { get; set; } public double dotnet_completed_percentage { get; set; } public string dotnet_completed_date { get; set; } public double php_completed_percentage { get; set; } public string php_completed_date { get; set; } public double nodejs_completed_percentage { get; set; } public string nodejs_completed_date { get; set; } public double ruby_completed_percentage { get; set; } public string python_advanced_completed_date { get; set; } public double python_advanced_completed_percentage { get; set; } public string python_completed_date { get; set; } public double scala_completed_percentage { get; set; } public string scala_completed_date { get; set; } public double cplus_completed_percentage { get; set; } public string cplus_completed_date { get; set; } public double ios_completed_percentage { get; set; } public string ios_completed_date { get; set; } public double android_completed_percentage { get; set; } public string android_completed_date { get; set; } public double go_completed_percentage { get; set; } public string go_completed_date { get; set; } public double frontend_completed_percentage { get; set; } public string frontend_completed_date { get; set; } public double http_completed_percentage { get; set; } public string http_completed_date { get; set; } public double java_advanded_lessons_completed_percentage { get; set; } public string java_advanded_lessons_completed_date { get; set; } public double hacking_headlines_completed_percentage { get; set; } public string hacking_headlines_completed_date { get; set; } public double dotnet_advanded_lessons_completed_percentage { get; set; } public string dotnet_advanded_lessons_completed_date { get; set; } public double backend_java_completed_percentage { get; set; } public string backend_java_completed_date { get; set; } public double source_codes_completed_percentage { get; set; } public string source_codes_completed_date { get; set; } public double angular_completed_percentage { get; set; } public string angular_completed_date { get; set; } public double python_advanded_lessons_completed_percentage { get; set; } public string python_advanded_lessons_completed_date { get; set; } public double angular_js_completed_percentage { get; set; } public string angular_js_completed_date { get; set; } public double dotnet_api_security_completed_percentage { get; set; } public string dotnet_api_security_completed_date { get; set; } public double java_api_security_completed_percentage { get; set; } public string java_api_security_completed_date { get; set; } public double appsec_for_qa_completed_percentage { get; set; } public string appsec_for_qa_completed_date { get; set; } public double appsec_for_decision_makers_completed_percentage { get; set; } public string appsec_for_decision_makers_completed_date { get; set; } public double java_advanced_lessons2_completed_percentage { get; set; } public string java_advanced_lessons2_completed_date { get; set; } public double dotnet_advanded_lessons2_completed_percentage { get; set; } public string dotnet_advanded_lessons2_completed_date { get; set; } public double python_advanded_lessons2_completed_percentage { get; set; } public string python_advanded_lessons2_completed_date { get; set; } public double react_completed_percentage { get; set; } public string react_completed_date { get; set; } public double php_advanded_lessons_completed_percentage { get; set; } public string php_advanded_lessons_completed_date { get; set; } public double iac_security_completed_percentage { get; set; } public string iac_security_completed_date { get; set; } public double backend_php_completed_percentage { get; set; } public string backend_php_completed_date { get; set; } public double backend_python_completed_percentage { get; set; } public string backend_python_completed_date { get; set; } public double backend_scala_completed_percentage { get; set; } public string backend_scala_completed_date { get; set; } public double completed_percentage { get; set; } } public class Info { public string Email { get; set; } public string Course { get; set; } public string Score { get; set; } public string completeddate { get; set; } } } }