试图反序列化传入主体的Json对象



我是做API工作的新手,尤其是JSON。

下面是我的代码…

Endpoing:

[HttpPost("postWithBody")]
public async Task<IActionResult> PostWithBody (string param1, [FromBody] object requestBody)
{

var x = JsonSerializer.Deserialize<ParamModel>(requestBody); <-- Error cannot convert from 'object' to System.ReadOnlySpan<byte>

return ok(param1); <--this here just so it doesn't bark at me
}

所以在上面的代码中,我在(RequestBody)上犯了错误:

无法从"对象"转换为"系统"。ReadOnlySpan

public class ParamModel
{
public string PName {get;set;}
public string PValue {get;set;}
}

为了完成这个演示,我的目标是将JSON值传递给正文中的端点如下所示

{
"Param1": "XXX",
"Param2": "111"
}

,我的目标是CustomParams模型类具有

PName = Param1
PValue = "XXX"

PName  = "Param2"
PValue = "111"

这是我采取的正确方法吗?

谢谢。

编辑:我想我可以这样做:[FromBody] parammodelrequestbody

我确实尝试过,当我像这样传递JSON时,它在端点中为空:

{"test":"hey"}

但是,我也可能需要做这样的事情,因为我想要有传递多个参数的选项。

public class ParamList
{
public List<ParamModel> data {get;set;}
}

并将其设置为[FromBody] ParamList requestBody

首先,我建议您在动作参数中使用模型,并让框架为您进行反序列化:

public async Task<IActionResult> PostWithBody(
string param1, [FromBody] ParamModel requestBody)

现在你可以发布JSON匹配对象,像这样,例如:

{ 
"PName": "test", 
"PValue": "hey"
}

在您的更新中,您说您希望使用ParamList对象。在这种情况下,需要匹配的JSON,如下所示:

{
"data": [
{ "PName": "test1", "PValue": "hey1" }, 
{ "PName": "test2", "PValue": "hey2" }
]
}

现在在你的操作中你可以像这样遍历列表:

foreach(var param in requestBody.data)
{
var paramName = param.PName;
var paramValue = param.PValue;
// etc.
}