我得到了以下模型
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<byte[]>
或 byte[][]
,在IEnumerable<byte[]>
的情况下null
(。
为什么在模型绑定期间请求正文反序列化时不调用 JsonConverter?如何修复?
您是否尝试过删除[JsonProperty(ItemConverterType = typeof(BinaryConverter))]
?
在我的测试设置中,在我删除该属性后,模型成功绑定。
编辑:更多信息...
根据 Json.NET 序列化指南,默认情况下,byte[]
将序列化为 base64 字符串。从源代码来看,看起来BinaryConverter
应该与System.Data.Linq.Binary
或System.Data.SqlTypes.SqlBinary
一起使用 - 而不是byte[]
。