首页 > 解决方案 > C# 格式化一个数组以发布到 Api

问题描述

我正在尝试为需要传递给发布请求的 json 数组获取正确的格式。

当使用 c# 作为首选编程语言时,我得到的示例代码显示以下格式:

var client = new RestClient("https://api.us/v2/webinars/94395753143/panelists");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", "Bearer _XU6l1eaDs9NQRTcb5QG4m0-ab1F3Y29ikw");
request.AddParameter("application/json", "{\"panelists\":[{\"name\":\"Mary\",\"email\":\"maryjkdfdsgfshdgf@jdfdkjdglfk.jkfgdj\"},{\"name\":\"Mike\",\"email\":\"dfdsgfsdhf@jkgfdgfkdhgfdjg.fkjgdf\"}]}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

作为概念证明,我从格式化 json 数组的 angularjs 视图中获取值,并通过 post 请求传递它们:

$http(request)
    .then(function successCallback(data) {
    
        angular.forEach(data.data, function (item) {
            
            var b = {
                name: item.Name,
                email: item.Email
            };
            $scope.arr.push(b);         
        });

        var parData = JSON.stringify({ 'panelists': $scope.arr, 'id': $scope.webinarId, 'bearer':  $scope.bearer});

    $http.post('/api/AddPanelists', parData)
        .then(function (data) {
    }), function (data) {
        alert("An error occurred during the request");
    };

在我的 C# 代码中,我有一个函数接收 parDAta 并检索传递的 3 个元素中的每一个(数组、id、承载)

    [HttpPost]
    public void CreatePanelists(Newtonsoft.Json.Linq.JObject data)
    {
        Parameters parameters = JsonConvert.DeserializeObject<Parameters>(data.ToString());

        IList<Panelist> panelists = parameters.panelists;  << this value does not seem right
        string webId = parameters.id;      << this value is fine
        string bearer = parameters.bearer; << this value is fine

        var client = new RestSharp.RestClient("https://api.us/v2/webinars/" + webId + "/panelists");
        var request = new RestRequest(Method.POST);
        request.AddHeader("content-type", "application/json;charset=UTF-8");
        request.AddHeader("authorization", "Bearer " + bearer);
        request.AddParameter("application/json", panelists, ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);
        var content = response.Content;

    }
    
    public class Panelist
    {
        public string name { get; set; }
        public string email { get; set; }
    }
    public class Parameters
    {
        public IList<Panelist> panelists { get; set; }
        public string id { get; set; }

        public string bearer { get; set; }
    }

当我在浏览器中检查 console.log 以查看 JavaScript 是否格式化 json 正确时,我看到了:

{"panelists":[{"name":"Jack Anderson","email":"janderson@email.com"},{"name":"Ed Johnson","email":"ejohnson@email.com"},{"name":"Dead Poole","email":"dpoole@email.com"},{"name":"Hank  Schmidt","email":"hschmidt@email.com"},{"name":"Steven Alves","email":"salves@email.com"},{"name":"Nilvio Alexander","email":"nalexanderemail.com"}],"id":94395753143,"bearer":"U19hW2pkQkO2A0Zv5EXz-h4kXJ56s"}

当我检查值一旦它到达 C# 方面时,字符串看起来有点不同:

当我检查已通过的内容时,这里:

public void CreatePanelists(Newtonsoft.Json.Linq.JObject data) << here

该值看起来:

{{
  "panelists": [
    {
      "name": "Jack Anderson",
      "email": "janderson@email.com"
    },
    {
      "name": "Ed Johnson",
      "email": "ejohnson@email.com"
    },
    {
      "name": "Dead Poole",
      "email": "dpoole@email.com"
    },
    {
      "name": "Hank  Schmidt",
      "email": "hschmidt@email.com"
    },
    {
      "name": "Steven Alves",
      "email": "salves@email.com"
    },
    {
      "name": "Nilvio Alexander",
      "email": "nalexander@email.com"
    }
  ],
  "id": 94395753143,
  "bearer": "U19hW2pkQkO2A0Zv5EXz-h4kXJ56s"
}}

我在字符串的开头和结尾看到了额外的大括号。

我的目标是能够传递一个看起来与第 3 方 api 需要格式化的数组完全一样的数组,我认为我做的不正确。

这是我需要的格式,专门用于小组成员字符串

{
  "panelists": [
    {
      "name": "Jack Anderson",
      "email": "janderson@email.com"
    },
    {
      "name": "Ed Johnson",
      "email": "ejohnson@email.com"
    },
    {
      "name": "Dead Poole",
      "email": "dpoole@email.com"
    },
    {
      "name": "Hank  Schmidt",
      "email": "hschmidt@email.com"
    },
    {
      "name": "Steven Alves",
      "email": "salves@email.com"
    },
    {
      "name": "Nilvio Alexander",
      "email": "nalexander@email.com"
    }
  ]
 }

感谢您阅读我的问题,希望我能得到一些帮助。如果我需要澄清任何事情,请告诉我。

谢谢,伊拉斯莫

更新

截屏

我认为多余的花括号已经消失了,但是我怎么知道要传递的字符串看起来像这样:

{
  "panelists": [
    {
      "name": "Jack Anderson",
      "email": "janderson@email.com"
    },
    {
      "name": "Ed Johnson",
      "email": "ejohnson@email.com"
    },
    {
      "name": "Dead Poole",
      "email": "dpoole@email.com"
    },
    {
      "name": "Hank  Schmidt",
      "email": "hschmidt@email.com"
    },
    {
      "name": "Steven Alves",
      "email": "salves@email.com"
    },
    {
      "name": "Alejandro Nava-Gomez",
      "email": "anava-gomez@cityofmadison.com"
    },
    {
      "name": "itortu",
      "email": "itortu@gmail.com"
    }
  ]
 }

如果您看到屏幕截图,我不确定它看起来是否正确。可能是我正在查看输出而不理解将传递的实际值。

标签: c#arraysjsonstringapi

解决方案


您可以创建新对象以满足预期的结构。

[HttpPost]
public void CreatePanelists([FromBody] Parameters parameters)
{
    var webId = parameters.id; 
    var bearer = parameters.bearer;
    var data = new
    {
        panelists = parameters.panelists
    };

    var client = 
        new RestSharp.RestClient($"https://api.us/v2/webinars/{webId}/panelists");
    var request = new RestRequest(Method.POST);
    request.AddHeader("content-type", "application/json;charset=UTF-8");
    request.AddHeader("authorization", $"Bearer {bearer}");

    request.AddParameter("application/json", data, ParameterType.RequestBody);

    IRestResponse response = client.Execute(request);
    var content = response.Content;
}

推荐阅读