#c# #json
#c# #json
Вопрос:
Я создал приведенную ниже строку JSON из таблицы данных и сгенерировал классы из желаемого вложенного вывода. Мне нужна помощь с кодом c sharp, чтобы преобразовать строку во вложенный объект. Нужно ли мне создавать для этого специальный сериализатор? Есть ли способ получше?
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; }
}
Комментарии:
1. Вам нужно, чтобы ph были вложенными или вы хотите как отдельный объект (иерархически вы хотите, чтобы ph1> ph2> ph3> ph4 или ph на том же уровне?)
2. Привет, я бы хотел, чтобы это было с иерархией; ph1> ph2> ph3> ph4.
Ответ №1:
Прежде всего, вам нужно проанализировать ваш json в a, 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)
inside JSON.Net
.
Как только у вас будет список, вы можете GroupBy
сгруппировать его по ФАЗАМ. Код выглядит примерно так:
var groups = myList.GroupBy(x => x.PHASE);
Теперь, когда у вас есть группы (определенные как IENumerable<IGrouping<string,RootObject1>>
), вам нужен foreach, чтобы перейти в каждую группу и заполнить соответствующий класс (и упорядочить по типу, если я не ошибаюсь).
Как только вы закончите цикл foreach, сериализуйте свой RootObject, и вы получите json в нужном формате.
Просто подсказка: PhaseN
должно быть assays
, иначе вы не получите правильного результата.
Комментарии:
1. пожалуйста, не могли бы вы предоставить дополнительную помощь в том, как группировать и заполнять классы?