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<byte[]>
或 byte[][]
和 null
如果是IEnumerable<byte[]>
)。
为什么在模型绑定期间没有在请求正文反序列化时调用 JsonConverter?怎么解决?
【问题讨论】:
【参考方案1】:你试过删除[JsonProperty(ItemConverterType = typeof(BinaryConverter))]
吗?
在我的测试设置中,模型在我删除该属性后成功绑定。
编辑:更多信息...
根据Json.NET Serialization Guide,默认情况下byte[]
将序列化为base64 字符串。从source code 来看,看起来BinaryConverter
应该与System.Data.Linq.Binary
或System.Data.SqlTypes.SqlBinary
一起使用——而不是byte[]
。
【讨论】:
以上是关于JsonConverter 不适用于模型绑定的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据
模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求
RxUI ObservableAsPropertyHelper 不适用于 XAML 绑定
模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)