JsonConverter不适用于模型绑定

时间:2019-02-09 16:04:42

标签: c# asp.net-web-api json.net asp.net-web-api2

我有以下型号

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=="
    ]
}

我认为应该使用从请求内容中发布的Base64字符串解码的字节数组填充Documents属性,尽管实际上该属性为空(如果模型中的类型为List<byte[]>byte[][],和null(如果是IEnumerable<byte[]>)。

为什么在模型绑定期间未按请求主体反序列化调用JsonConverter?如何解决?

1 个答案:

答案 0 :(得分:3)

您是否尝试过删除[JsonProperty(ItemConverterType = typeof(BinaryConverter))]

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

编辑:更多信息...

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