Sin*_*tic 5 .net json.net asp.net-mvc-4 asp.net-web-api
在WebAPI中,我注意到一个不一致的问题是我们的验证实践搞得一团糟.如果您使用xml中的POST发送错误的正文/有效负载,则反序列化将失败并且您将获得空指针.如果您在JSON中发送错误的正文/有效负载,则会得到一个空对象.这是误导,我不喜欢它.有没有办法强制使用失败的json反序列化的空指针?
更新:我没有反序列化问题.我有一个行为问题似乎是DataContractSerializer和Json.net序列化程序之间的差异.当xml无法反序列化时,有效内容为空.但是,当Json无法反序列化时,似乎它正在实例化预期有效负载的默认实例.
错误的xml有效负载示例:

使用错误的json有效负载进行相同调用的示例(有效负载不为空.相反,它是有效负载类的默认实例)

MissingMemberHandling.Ignore默认情况下,Web.API 使用JsonMediaTypeFormatter.
您需要将其设置为MissingMemberHandling.Error:
GlobalConfiguration.Configuration
.Formatters.JsonFormatter
.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
Run Code Online (Sandbox Code Playgroud)
null发送 JSON 时您应该得到如下结果:
{
"somenotexistingprop": ""
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您发送一个完全空的 JSON 对象:{}那么您仍然会得到一个具有空属性的对象,而不是null. 因为JsonConvert.DeserializeObject如果反序列化一个空的 JSON,则返回一个空对象(请参阅github的单元测试)。
| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |