首页 > 解决方案 > ASP.NET MVC DataBinder 没有从 JSON 反序列化简单类型

问题描述

输入 JSON:

{ "name": "gerry" }

动作方法:

{ public ActionResult GenerateQrCode([FromBody] string name }

问题:

我试过了:

情况:

标签: jsonasp.net-core.net-coredata-bindingdeserialization

解决方案


您将名称作为 json 传递,但作为字符串接受,因此它将为空,您可以使用 InputFormatter,例如:

public class RawJsonBodyInputFormatter : InputFormatter
{
    public RawJsonBodyInputFormatter()
    {
        this.SupportedMediaTypes.Add("application/json");
    }

    public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        var request = context.HttpContext.Request;
        using (var reader = new StreamReader(request.Body))
        {
            var content = await reader.ReadToEndAsync();
            return await InputFormatterResult.SuccessAsync(content);
        }
    }

    protected override bool CanReadType(Type type)
    {
        return type == typeof(string);
    }
}

在startup.cs中:

services
.AddMvc(options =>
{
    options.InputFormatters.Insert(0, new RawJsonBodyInputFormatter());
});

然后你可以得到行字符串

在此处输入图像描述

要对其进行反序列化,您可以检查它,使用 Newtonsoft 并将字符串设置为模型

[HttpPost]
    public IActionResult GenerateQrCode([FromBody] string name)
    {
        object o = JsonConvert.DeserializeObject(name);
        MyModel my = JsonConvert.DeserializeObject<MyModel>(o.ToString());
        return View();
    }

在此处输入图像描述


推荐阅读