当参数没有被反序列化时,有没有办法警告或抛出错误?

时间:2015-03-05 16:57:22

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

以下是我上周遇到的情景:

我将一个JSON对象数组发送到WebAPI方法,其签名如下:

void Post(IEnumerable<ItemViewModel> items)

JSON数组的一个示例可能看起来像(我为了简洁而删除了大部分属性):

[{ size: 1 }, 
 { size: 1.5 }, 
 { size: 2 }, 
 { size: 3 }, 
 { size: 1.25 }]

View Model类似于以下内容(为简洁起见,删除了大多数属性):

public class ItemViewModel
{
    public int Size { get; set; }
}

问题是ItemViewModel的Size属性是“int”类型,而一些JSON对象的size属性是“double”类型。

WebAPI没有将对象视为ItemViewModel类型的匹配,但它无声地失败并仍然对集合中的其他对象进行反序列化,只是忽略那些不完全匹配的对象。

是否有任何设置/配置点或其他方法让WebAPI抛出异常或在发生这种情况时记录警告?

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到。

首先,最简单的方法是使用[Required]属性修饰模型,然后调用ModelState.IsValid。那会告诉你一些事情是否没有正确反序列化。

如果你不喜欢疯狂地用属性来装饰你的所有课程(我讨厌它),我会听到有关Fluent Validation的好消息。

你也可以validate against a JSON schema