c# - MVC/WebApi:“Newtonsoft.Json.JsonSerializationException”类型的异常 - 从发布请求中检索数组时
问题描述
我正在学习如何在 POST 中发送两个参数,这些参数分组在一个对象数组中作为有效负载。
AngularJS:
var parData = { 'panelists': JSON.stringify($scope.arr), 'id': $scope.webId };
$http.post("/api/addPanelists", parData)
.then(function (data, status, headers, config) {
}), function (data, status, headers, config) {
alert("An error occurred during the request");
};
服务器端:
班级小组成员:
public class Panelists
{
public string name { get; set; }
public string email { get; set; }
}
AddPanelists ApiController:
[HttpPost]
public void CreatePanelists(Newtonsoft.Json.Linq.JObject data)
{
List<Panelists_DataImport.Panelist> panelistList = new List<Panelists_DI.Panelist>();
panelistList = data["panelist"].ToObject<List<Panelists_DataImport.Panelist>>();
webID = data["webId"].ToObject<Panelists_DataImport.Webinar>();
}
数据内容:
{{ "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\"}]", "id": "94395753143"}}
当我到达线路时
panelistList = data["panelists"].ToObject<List<Panelists>>();
我收到此错误:
Error converting value "[{"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"}]" to type 'System.Collections.Generic.List`1[Panelists_DataImport.Panelists]'. Path ''.
如何从发布请求中正确检索数组?我使用了不正确的类型吗?
我现在被困住了,任何帮助都将不胜感激。
谢谢你,伊拉斯莫
更新代码 (不工作还不了解如何从文章中实现)
[HttpPost]
public void CreatePanelists(Newtonsoft.Json.Linq.JObject data)
{
string webID = data["id"].ToString();
IList<Panelist> panelistList = new IList<Panelist>;
}
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; }
}
更新新代码和错误窗口的屏幕截图:
解决方案
你在这里做错了什么。
有效的 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"
}],
"id": "94395753143"
}
和类应该是这样的。
public class Panelist
{
public string name { get; set; }
public string email { get; set; }
}
public class Example
{
public IList<Panelist> panelists { get; set; }
public string id { get; set; }
}
你应该像这样访问它。
data.panelists
不像这样data["panelists"]
更新:
[HttpPost]
public void CreatePanelists(string data)
{
Parameters parameters = JsonConvert.DeserializeObject<Parameters>(data);
IList<Panelist> panelistList = parameters.panelists;
}
推荐阅读
- rust - 为什么在为类型别名编写 impl 时会出现错误“无法为定义类型的 crate 之外的类型定义固有的 `impl`”?
- kubernetes - kubernetes:虽然 pod 健康,但服务无法访问
- angularjs - 如何将我的 anular js 前端连接到在两个快速服务器上运行的两个套接字不同连接
- php - 带有参数和类型的soap客户端调用函数
- android - 清单合并失败(使用房间)
- python - 如何计算每条记录中的单词并在最佳时间将其存储在单词和键级别?
- java - 示例 keycloak spring-boot 应用程序无法找到 bean KeycloakSpringBootConfigResolver
- r - 如何在 GGparcoord R 的平行坐标图中添加刻度?
- perl - 在 perl 中添加到哈希时遇到问题
- go - 使用 Go Olivere/elastic 过滤 value1 == value2 的 Elasticsearch 查询