问题描述
将 JSON 发布到 Web API 时,不仅会自动反序列化,还可以使用模型验证,如
// ItemPostRequest
class ItemPostRequest {
[Required] // this will automatically be validated and errors created if it is missing
public string Description { get; set; }
}
但是就我而言,我只有一个包含 JSON 的字符串。我可以使用 JsonSerializer.Deserialize<ItemPostRequest>(myJsonString);
反序列化它,但缺少验证。
如何使用验证/如何像 Web API 在内部那样手动反序列化和验证 JSON?
在我的例子中,JSON 字符串是具有 file
和 json
等键的表单数据的一部分,但表单数据格式化程序只关心将表单数据拆分为键值对,它不关心反序列化 json 及其模型验证。所以我必须手动执行此操作 - 但如何操作?
解决方法
也许像下面这样。我尚未对其进行测试,但您应该能够使用 TryValidateModel() 根据您的类注释(例如 [Required])手动验证您的 ItemPostRequest。
// Deserialize
var itemPostRequest = JsonSerializer.Deserialize<ItemPostRequest>(myJsonString);
// Reset just in case
ModelState.Clear();
// Manually validate the model using the annotations on the model class
TryValidateModel(itemPostRequest);
// If it fails,return error
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// Otherwise we're good,keep going...
,
在模型绑定器中反序列化 JSON,就像这里写的:https://stackoverflow.com/a/49471892 然后验证将自动完成:-)