Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can i change the json formate after request in c#?

I am sending the Json format like this in 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": "[email protected]",
    },
    {
      "Branch": "ABK016",
      "Doc": "NCE",
      "Description": "Testing1",
      "dni": "1016035233",
      "Name": "ABCE",
      "Gender": "M",
      "Title": "Univercity",
      "email": "[email protected]",
    }
  ]
}

In controller level i am doing the validation of all fields. After validation how can i convert the above json string to below format

{

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

And aftre converting, i want to insert to database. How to convert in c#? Please help me.

And the below code is the class for students:

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; }
}

And i am deserializing here

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

Please refer the updated code

like image 614
Chandu Avatar asked Oct 16 '22 05:10

Chandu


1 Answers

You can use DeserializeAnonymousType method. First create a template object

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

now deserialize to temporary json object:

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

After this you can copy info from json header to Students with linq:

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

Also note, that your input JSON is not valid: it missing comma afetr degree value.

Demo is here

like image 106
Aleks Andreev Avatar answered Oct 21 '22 03:10

Aleks Andreev