2016-10-21 4 views
0

Я создал строку JSON ниже из таблицы данных и сгенерировал классы из нужного вложенного вывода. Мне нужна помощь с четким кодом, чтобы преобразовать строку в вложенный объект. Нужно ли мне создавать сериализатор на заказ? Есть ли лучший метод?Как преобразовать плоский файл в вложенный JSON с использованием класса cs

string = [{"name":"example1", "priority" : "high", "PHASE": "phase1","id" :1001, "type": "glove"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase1","id" :1002, "type": "shoe"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase1","id" :1003, "type": "sock"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase2","id" :1005, "type": "large"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase2","id" :1006, "type": "medium"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase2","id" :1007, "type": "small"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase3","id" :1008, "type": "ladies"}, 
{"name":"example1", "priority" : "high", "PHASE": "phase3","id" :1009, "type": "gents"}]; 



desired_output = { 
"NAME": "example1", 
"PRIORITY" : "high", 
"PHASE": 
      { 
      "phase1": 
         [ 
         { "id": "1001", "type": "glove" }, 
       { "id": "1002", "type": "shoe" }, 
       { "id": "1003", "type": "sock", 

"ph2": 
      { 
       "phase2" : 
         [ 
         { "id": "1005", "type": "large" }, 
       { "id": "1006", "type": "medium" }, 
       { "id": "1007", "type": "small", 
"ph3": 
      { 
      "phase3": 
         [ 
         { "id": "1008", "type": "ladies" }, 
       { "id": "1009", "type": "gents" } 

]} 
} 
]} 
} 
] 
} 
} 


public class Phase3 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
} 

public class Ph3 
{ 
    public List<Phase3> phase3 { get; set; } 
} 

public class Phase2 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
    public Ph3 ph3 { get; set; } 
} 

public class Ph2 
{ 
    public List<Phase2> phase2 { get; set; } 
} 

public class Phase1 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
    public Ph2 ph2 { get; set; } 
} 

public class PHASE 
{ 
    public List<Phase1> phase1 { get; set; } 
} 

public class RootObject 
{ 
    public string NAME { get; set; } 
    public string PRIORITY { get; set; } 
    public PHASE PHASE { get; set; } 
} 
+0

Вам нужно, чтобы ph были вложенными или вы хотите как отдельный объект (иерархически вы wqant ph1> ph2> ph3> ph4 или ph на одном уровне?) – Tinwor

+0

Привет, мне бы хотелось, чтобы он был с иерархией; ph1> ph2> PH3> PH4. – user3359706

ответ

0

Прежде всего, вам нужно разобрать ваш JSON в List<RootObject1> где RootObject1 определяется как:

public class RootObject1 
{ 
    public string name { get; set; } 
    public string priority { get; set; } 
    public string PHASE { get; set; } 
    public int id { get; set; } 
    public string type { get; set; } 
} 

Вы можете Исли сделать эту задачу с помощью JsonConvert.DeserializeObject<T>(string) внутри JSON.Net.
После того, как у вас есть Список, вы можете GroupBy от PHASE, чтобы сгруппировать список по PHASE. Код это что-то вроде этого:

var groups = myList.GroupBy(x => x.PHASE); 

Теперь, когда у вас есть группы (определяется как IENumerable<IGrouping<string,RootObject1>>) вам нужно Еогеасп идти в каждой группе и заполнить собственный класс (и заказ по типу ИОФ я не ошибаюсь) ,
Как только вы закончите цикл foreach, выполните сериализацию RootObject, и вы получите json, отформатированный так, как вы хотите.
Подсказка: PhaseN должен быть assays иначе вы не получите правильный результат.

+0

, пожалуйста, можете ли вы предоставить дополнительную информацию о том, как группировать и заполнять классы? – user3359706