c# - 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"
}
]
}
如果您看到屏幕截图,我不确定它看起来是否正确。可能是我正在查看输出而不理解将传递的实际值。
解决方案
您可以创建新对象以满足预期的结构。
[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;
}
推荐阅读
- java - 如何分隔字符串中的char和num并打印num的char重复次数
- dataweave - 我如何在 Dataweave 2 中使用过滤器和映射
- excel - 如何允许在 VBA InputBox 中输入多行输入?
- c++ - stringstream operator<< 在按位否定时不能按预期工作
- java - 我可以将内部 Spring Boot 变量传递给 gradlew 吗?
- arrays - 如何按字母顺序重新排列标签列表?
- python - 带有 keras 的 CNN 架构
- c - “{”之前的预期表达式,带有互斥体初始化
- jpegtran - 使用 jpegtran 的服务器上的 mozjpeg 与 Squoosh 中的结果相同
- javascript - 反应日期选择器解析选定的日期