JsonConverter 不适用于模型绑定

Posted

技术标签:

【中文标题】JsonConverter 不适用于模型绑定【英文标题】:JsonConverter does not work on model binding 【发布时间】:2019-07-03 14:46:12 【问题描述】:

我有以下型号

public class SignDocumentsModel

    [JsonProperty(ItemConverterType = typeof(BinaryConverter))]
    public byte[][] Documents  get; set; 

    public bool Detached  get; set; 

和控制器代码

[HttpPost]
[Route("requestId/sign")]
public Task<IHttpActionResult> SignDocuments([FromUri] Guid requestId, SignDocumentsModel parameters)

    return SomeKindOfProcessing(requestGuid, parameters);

现在,当我向邮递员执行请求时

POST
Content-Type: application/json

    "Detached": "true",
    "Documents": [
        "bG9weXN5c3RlbQ=="
    ]

我想 Documents 属性应该填充从请求内容中发布的 Base64 字符串解码的字节数组,尽管实际上该属性是空的(如果它在模型中的类型是 List&lt;byte[]&gt;byte[][]null如果是IEnumerable&lt;byte[]&gt;)。

为什么在模型绑定期间没有在请求正文反序列化时调用 JsonConverter?怎么解决?

【问题讨论】:

【参考方案1】:

你试过删除[JsonProperty(ItemConverterType = typeof(BinaryConverter))]吗?

在我的测试设置中,模型在我删除该属性后成功绑定。

编辑:更多信息...

根据Json.NET Serialization Guide,默认情况下byte[] 将序列化为base64 字符串。从source code 来看,看起来BinaryConverter 应该与System.Data.Linq.BinarySystem.Data.SqlTypes.SqlBinary 一起使用——而不是byte[]

【讨论】:

以上是关于JsonConverter 不适用于模型绑定的主要内容,如果未能解决你的问题,请参考以下文章

模型绑定不适用于angular2中的选择[重复]

ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据

模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求

MVC4 webapi中的反序列化/模型绑定不适用于数组

RxUI ObservableAsPropertyHelper 不适用于 XAML 绑定

模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)