Как я могу изменить формат json после запроса в c #?

#c# #json #asp.net-web-api

#c# #json #asp.net-web-api

Вопрос:

Я отправляю формат Json, подобный этому, в PostMan

     {
  "number": 2106887,
  "date": "09/10/2018",
  "degree":"BE"
  "Students": [
    {
      "Branch": "ABK015",
      "Doc": "NCE",
      "Description": "Testing",
      "dni": "1016035232",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abc@in.com",
    },
    {
      "Branch": "ABK016",
      "Doc": "NCE",
      "Description": "Testing1",
      "dni": "1016035233",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abcd@in.com",
    }
  ]
}
  

На уровне контроллера я выполняю проверку всех полей.
После проверки, как я могу преобразовать приведенную выше строку json в формат ниже

 {

  "Students": [
    {
      "number": 2106887,
      "date": "09/10/2018",
      "degree":"BE"
      "Branch": "ABK015",
      "Doc": "NCE",
      "Description": "Testing",
      "dni": "1016035232",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abc@in.com",
    },
    {
      "number": 2106887,
      "date": "09/10/2018",
      "degree":"BE"
      "Branch": "ABK016",
      "Doc": "NCE",
      "Description": "Testing1",
      "dni": "1016035233",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abcd@in.com",
    }
  ]
}
  

И после преобразования я хочу вставить в базу данных.
Как преобразовать в c #? Пожалуйста, помогите мне.

И приведенный ниже код является классом для студентов:

 public class Students
{
    [Required]
    public string Branch{ get; set; }
    [Required]
    public string Doc{ get; set; }
    [Required]
    public string Description{ get; set; }
    [Required]
    public string dni{ get; set; }
    [Required]
    public string Name{ get; set; }
    [Required]
    public string Gender{ get; set; }
    [Required]
    public string Title{ get; set; }
    [Required]
    public string email{ get; set; }
    [Required]
    public string degree{ get; set; }
    [Required]
    public string date{ get; set; }
    [Required]
    public string number{ get; set; }
}
  

И здесь я выполняю десериализацию

 var requestBody = requestContent.Content.ReadAsStringAsync().Resu<
            JObject jxxx = JsonConvert.DeserializeObject<dynamic>(requestBody);
  

Пожалуйста, обратитесь к обновленному коду

Комментарии:

1. Путем создания этой структуры и сериализации.

2. Пожалуйста, покажите нам какой-нибудь код, включая ваши соответствующие модели и методы контроллера.

3. @Amy var requestBody = requestContent.Content.ReadAsStringAsync().Resu< JObject jxxx = JsonConvert.DeserializeObject<dynamic>(requestBody); здесь requestContent имеет формат json

4. Возвращаемый вами json будет результатом возвращаемой вами модели, если вы следуете обычным соглашениям. Как сказала @Amy, нам нужно увидеть ваши модели и действия контроллера

5. @GregH я создал класс для студентов со всеми полями

Ответ №1:

Вы можете использовать DeserializeAnonymousType метод. Сначала создайте template объект

 var template = new {number = "", date = "", degree = "", Students = new Students[0]};
  

теперь десериализуйте во временный объект json:

 var jsonObject = JsonConvert.DeserializeAnonymousType(input, template);
  

После этого вы можете скопировать информацию из заголовка json в Students с помощью linq:

 var students = jsonObject.Students.Select(s =>
{
    s.number = jsonObject.number;
    s.date = jsonObject.date;
    s.degree = jsonObject.degree;
    return s;
}).ToArray();
  

Также обратите внимание, что ваш входной JSON недопустим: в нем отсутствует запятая afetr degree значения.

Демонстрация здесь

Комментарии:

1. Привет, вот как я могу добавить список студентов?

2. @Chandu замените его ToArray на ToList , и тогда вы сможете вызвать students.Add(...

3. @Alexs, у меня есть еще одно сомнение. Как преобразовать все теги (ключи) в нижний регистр? Нравится Branch to branch, Doc to doc, Description to description

4. @Chandu ты можешь использовать JsonProprrty newtonsoft.com/json/help/html/JsonPropertyName.htm

Ответ №2:

 "Students": [
    {
      "number": 2106887,
      "date": "09/10/2018",
      "degree":"BE"
      "Branch": "ABK015",
      "Doc": "NCE",
      "Description": "Testing",
      "dni": "1016035232",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abc@in.com",
    },
    {
      "number": 2106887,
      "date": "09/10/2018",
      "degree":"BE"
      "Branch": "ABK016",
      "Doc": "NCE",
      "Description": "Testing1",
      "dni": "1016035233",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "abcd@in.com",
    }
  ]
  

А затем попробуйте это

 var students = JsonConvert.DeserializeObject<Students[]>(requestBody);