【问题标题】:How can i change the json formate after request in c#?在c#中请求后如何更改json格式?
【发布时间】:2019-03-15 13:05:15
【问题描述】:

我在 PostMan 中发送这样的 Json 格式

    {
  "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().Result;
            JObject jxxx = JsonConvert.DeserializeObject<dynamic>(requestBody);

请参考更新后的代码

【问题讨论】:

  • 通过创建该结构并序列化。
  • 请给我们一些代码,包括你的相关模型和控制器方法。
  • @Amy var requestBody = requestContent.Content.ReadAsStringAsync().Result; JObject jxxx = JsonConvert.DeserializeObject&lt;dynamic&gt;(requestBody);这里requestContent是json格式
  • 如果您遵循正常约定,您返回的 json 将来自您返回的模型。正如@Amy 所说,我们需要查看您的模型和控制器操作
  • @GregH 我已经为所有领域的学生创建了课程

标签: c# json asp.net-web-api


【解决方案1】:

您可以使用DeserializeAnonymousType 方法。首先创建一个template对象

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

现在反序列化为临时 json 对象:

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

在此之后,您可以使用 linq 将信息从 json 标头复制到 Students

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

另请注意,您的输入 JSON 无效:它缺少逗号后 degree 值。

演示是here

【讨论】:

  • 您好,请问如何添加学生名单?
  • @Chandu 将ToArray 替换为ToList,然后您可以致电students.Add(...
  • @Alexs,我还有一个疑问。如何将所有标记名(键)转换为小写?喜欢Branch to branch, Doc to doc, Description to description
  • @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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2011-07-28
    相关资源
    最近更新 更多