【发布时间】:2020-06-25 08:41:49
【问题描述】:
我正在尝试使用 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());
...
}
}
我尝试反序列化后,用户和公司属性为空。不知道我做错了什么,以及如何在不为此创建特定模型的情况下进行简单的反序列化(我不希望这样做,因为这是我只使用一次的帖子。
JsonElement 数据如下所示:
ValueKind = Object : "
{"users":[{"ID":1,"Firstname":"MyFirstname","Lastname":"MyLastname"},
{"ID":2,"Firstname":"Jeff","Lastname":"Troll"}],
"company":
{"ID":1,"Companyname":"Stackoverflow","Location":"Unknown"}}
"
JsonElement 是正确的选择吗?或者我可以通过其他方式解决它吗?
【问题讨论】:
-
创建一个
class来表示您的有效负载(使用Users和Company属性)并用它替换JsonElement -
您能否分享一个示例 json 主体以提供解决方案或指针?
-
@haim770 感谢您的回复。是的,如果没有其他方法可以解决这个问题,我可能会为此使用类/模型。
-
@AKINNUBIABIOLASYLVESTER ABIOLA SYLVESTER - 我更新了问题,添加了用户和公司元素以及 jsonelement 响应。
-
我认为反序列化一个对输入建模一次的类比将数据反序列化两次到不同的类更简单。另请注意:
data不是User或Company,而是其他东西,所以这不起作用。
标签: javascript c# .net-core