gpt4 book ai didi

.net - JSON 序列化程序在反序列化失败时创建一个空对象而不是 null

转载 作者:行者123 更新时间:2023-12-04 19:09:47 29 4
gpt4 key购买 nike

在 WebAPI 中,我注意到一个不一致的问题,它扰乱了我们的验证实践。如果您在 xml 中使用 POST 发送错误的正文/有效负载,反序列化将失败并且您会得到一个空指针。如果您以 JSON 格式发送错误的正文/有效负载,则会得到一个空对象。这是误导,我不喜欢它。有没有办法强制使用失败的 json 反序列化空指针?

更新:
我没有反序列化问题。我有一个行为问题,似乎是 DataContractSerializer 和 Json.net 序列化器之间的差异。当 xml 反序列化失败时,有效负载为空。但是,当 Json 无法反序列化时,它似乎正在实例化预期负载的默认实例。

错误的 xml 负载示例:
enter image description here

使用错误 json 负载的相同调用的示例(负载不为 null。而是负载类的默认实例)

enter image description here

最佳答案

默认情况下,Web.API 使用 MissingMemberHandling.Ignore JsonMediaTypeFormatter 中的设置.

您需要将其设置为 MissingMemberHandling.Error和:

GlobalConfiguration.Configuration
.Formatters.JsonFormatter
.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;

你应该得到 null发送 JSON 时,如:
{
"somenotexistingprop": ""
}

但是,如果您发送一个完全空的 JSON 对象: {}那么你仍然会得到一个具有空属性的对象,而不是 null .因为 JsonConvert.DeserializeObject如果反序列化一个空的 JSON,则返回一个空对象(请参阅此单元测试 github)。

关于.net - JSON 序列化程序在反序列化失败时创建一个空对象而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179006/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com