Question

I am getting some flat data in a c# application as a list. Sample data google drive spreadsheet

I want this data to be converted into a hierarchical structure. Have created a JSON representation of the same here

The final structure I am expecting is here enter image description here

I have created the data as a list in C#. I want this list to be converted into a c# collection object. Please give me pointers on what will be easiest way to do so. [this is a console application code]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{

    public class Marklist
    {

    public string Student_name { set; get; }
    public string Frequency  { set; get; }
    public string Major  { set; get; }
    public string Subject_category   { set; get; }
    public string Subject_subcategory { set; get; } 
    public int Spring_mark   { set; get; }
    public int Autumn_mark   { set; get; }
    public int Summer_mark { set; get; }



        public Marklist() { }

        public Marklist(string student_name,string frequency,string major,string        subject_category,string subject_subcategory,string spring_mark,string autumn_mark,string summer_mark)
        {

             Student_name =student_name;
             Frequency   =frequency;
              Major  =major;
               Subject_category  =subject_category;
              Subject_subcategory   =subject_subcategory;
            Spring_mark  =spring_mark;
            Autumn_mark  =autumn_mark;
            Summer_mark =summer_mark;

        }

    }

    static void Main(string[] args)
    {

    List<Marklist> Marklists = new List<Marklist>();

        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Monthly",Major="Science",Subject_category="Physics",Subject_subcategory="Atomic",Spring_mark=100,Autumn_mark=95,Summer_mark=75});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Monthly",Major="Science", Subject_category="Physics",Subject_subcategory="Nuclear",Spring_mark=95, Autumn_mark=75,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Monthly",Major="Science", Subject_category="Physics",Subject_subcategory="Electronics",Spring_mark=75, Autumn_mark=95,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Monthly",Major="Language", Subject_category="Tamil",Subject_subcategory="Literature",Spring_mark=80, Autumn_mark=90,Summer_mark=70});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Monthly",Major="Commerce" Subject_category="Retail_data",Subject_subcategory="Big_data_analytics",Spring_mark=90, Autumn_mark=80,Summer_mark=70});

        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Weekly",Major="Science",Subject_category="Physics",Subject_subcategory="Atomic",Spring_mark=100,Autumn_mark=95,Summer_mark=75});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Weekly",Major="Science", Subject_category="Physics",Subject_subcategory="Nuclear",Spring_mark=95, Autumn_mark=75,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Weekly",Major="Science", Subject_category="Physics",Subject_subcategory="Electronics",Spring_mark=75, Autumn_mark=95,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Weekly",Major="Language", Subject_category="Tamil",Subject_subcategory="Literature",Spring_mark=80, Autumn_mark=90,Summer_mark=70});
        Marklists.Add(new Marklist(){Student_name="Nimalan",Frequency="Weekly",Major="Commerce" Subject_category="Retail_data",Subject_subcategory="Big_data_analytics",Spring_mark=90, Autumn_mark=80,Summer_mark=70});

        Marklists.Add(new Marklist(){Student_name="StarNimalan",Frequency="Monthly",Major="Science",Subject_category="Physics",Subject_subcategory="Atomic",Spring_mark=100,Autumn_mark=95,Summer_mark=75});
        Marklists.Add(new Marklist(){Student_name="StarNimalan",Frequency="Monthly",Major="Science", Subject_category="Physics",Subject_subcategory="Nuclear",Spring_mark=95, Autumn_mark=75,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="StarNimalan",Frequency="Monthly",Major="Science", Subject_category="Physics",Subject_subcategory="Electronics",Spring_mark=75, Autumn_mark=95,Summer_mark=100});
        Marklists.Add(new Marklist(){Student_name="StarNimalan",Frequency="Monthly",Major="Language", Subject_category="Tamil",Subject_subcategory="Literature",Spring_mark=80, Autumn_mark=90,Summer_mark=70});
        Marklists.Add(new Marklist(){Student_name="StarNimalan",Frequency="Monthly",Major="Commerce" Subject_category="Retail_data",Subject_subcategory="Big_data_analytics",Spring_mark=90, Autumn_mark=80,Summer_mark=70});

    }
}
}
Was it helpful?

Solution

Use this class created from your json data using jsonC# http://json2csharp.com/#

public class Mark
{
public string markname { get; set; }
public int mark { get; set; }
}

public class SubjectSubcategory
{
public string name { get; set; }
public List<Mark> Marks { get; set; }
}

public class SubjectCategory
{
public string name { get; set; }
public List<SubjectSubcategory> Subject_subcategory { get; set; }
}

 public class Major
{
public string name { get; set; }
public List<SubjectCategory> Subject_category { get; set; }
 }

 public class Frequency
 {
public string name { get; set; }
public List<Major> Major { get; set; }
 }

public class Product
{
public string studentname { get; set; }
 public List<Frequency> frequency { get; set; }
 }

public class RootObject
{
public List<Product> product { get; set; }
}

OTHER TIPS

First group by student name, this will give you a distinct record for each student with collection of rows of data. Then for each of these, group by frequency, then group by major and so on and on.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top