[英]Deserialize JsonElement after posting multiple objects using fetch
我正在尝试使用 fetch 将多个对象发布到.core 3.1 API。 我已经设法将结果作为 JsonElement 接收,但我无法对其进行反序列化。
JS 数据和获取:
const users = [
{
ID: 1,
Firstname: "MyFirstname",
Lastname: "MyLastname"
},
{
ID: 2,
Firstname: "Jeff",
Lastname: "Troll"
}
];
const company = {
ID: 1,
Companyname: "Stackoverflow",
Location: "Unknown"
};
await fetch(URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
users: users,
company:company
})
})
.then(response => {
response.text().then(function (text) {
alert(text);
});
});
该帖子通过了我的操作,我可以看到 JSON 结果,但我无法对其进行反序列化。
我的行动:
[HttpPost]
public async Task<ActionResult<Users>> Post([FromBody]JsonElement data)
{
try
{
var users = JsonSerializer.Deserialize<Users>(data.GetRawText());
var company = JsonSerializer.Deserialize<Company>(data.GetRawText());
...
}
}
在我尝试反序列化它们后,用户和公司属性为空。 不知道我做错了什么,以及如何在不为此创建特定 Model 的情况下进行简单的反序列化(我不希望这样做,因为这是我只使用一次的帖子。
JsonElement 数据如下所示:
ValueKind = Object : "
{"users":[{"ID":1,"Firstname":"MyFirstname","Lastname":"MyLastname"},
{"ID":2,"Firstname":"Jeff","Lastname":"Troll"}],
"company":
{"ID":1,"Companyname":"Stackoverflow","Location":"Unknown"}}
"
JsonElement 是正确的选择吗? 或者我可以通过其他方式解决它吗?
@arkhz 要回答您的问题,请在实施或解决方案下方找到。
public class Users
{
public int ID { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
public class Company
{
public int ID { get; set; }
public string Companyname { get; set; }
public string Location { get; set; }
}
[HttpPost]
public async Task<ActionResult<Users>> Post([FromBody]JsonElement data)
{
try
{
var users = JsonSerializer.Deserialize<List<Users>>(data.GetRawText());
var company = JsonSerializer.Deserialize<Company>(data.GetRawText());
return Ok(new { message = "", data = users });
}
catch
{
return Ok(new { message = "", data = data });
}
}
所以特别是您的 json object 用户和公司是用户列表 Object 或用户集合 ZA8CFDE63931BD59EB26AC9C64。
在下面找到作为测试发送的示例 JsonString
{
"users": [
{
"ID": 1,
"Firstname": "MyFirstname",
"Lastname": "MyLastname"
},
{
"ID": 2,
"Firstname": "Jeff",
"Lastname": "Troll"
}
],
"company": {
"ID": 1,
"Companyname": "Stackoverflow",
"Location": "Unknown"
}
}
请你也可以像这样创造你的身体。
var body = {"users": users, "company":company};
await fetch(URL, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body:body
})
.then(response => {
response.text().then(function (text) {
alert(text);
});
});
请这个工作,我已经测试了一遍。 我可以分享你测试过的 postman 的截图。 用 vscode。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.