繁体   English   中英

C#WebAPI 2反序列化产生空值,但不产生异常

[英]C# WebAPI 2 Deserialization Produces Nulls but No Exception

我正在使用WebAPI 2 / Newtonsoft.Json 9.0.1,并遇到反序列化问题。 我有一个将DTO作为其唯一参数的端点。 调用该方法时,仅反序列化DTO属性之一,其余属性为null或默认值。 此问题是由嵌套属性引起的,该属性的类型是接口而不是具体类型。 这是此处报告的相同问题。

我知道我可以通过将类型更改为具体类型或将类型初始化程序添加到现有接口属性上来解决此问题,如下所示:

IAddressDTO Address { get; set; } = new AddressDTO();

我的问题是:为什么反序列化过程中不会引发.NET异常/错误? 如果反序列化存在问题,我想在运行时知道,而不仅仅是在各处使用“ null”。 这给生产中的我带来了一个巨大的问题,如果像我期望的那样抛出异常,则可以避免。

如果我创建如下所示的单元测试,则会引发异常。 WebAPI如何/为什么吞下此异常,如何使它停止这样做? 我是否需要自定义过滤器或其他内容? 这似乎应该是默认行为。

这是一个NUnit测试,它确实会在运行WebAPI端点时引发异常。

[Test]
public void DeserializationIssue()
{
    string json = @"{
        ""OrderNumber"":155,
        ""Person"":{
            ""FirstName"":""AAAA"",
            ""LastName"":""B"",
            ""Address"":{
                ""line1"":""1234 Easy St"",
            }
        }
    }";
    PatientDTO patientDTO = JsonConvert.DeserializeObject<PatientDTO>(json);
    Assert.That(patientDTO.Person.Address.Line1, Is.EqualTo("1234 Easy St"));
}

RE:为什么在反序列化期间没有引发.NET异常/错误?

我敢打赌,这种异常正在发生,而您只是没有设置要检测它。 有关Webapi和全局异常处理的信息,请参见此人工文件: https ://docs.microsoft.com/zh-cn/aspnet/web-api/overview/error-handling/web-api-global-error-handling。

如果数据有问题,并且您知道此反序列化可能会失败,则可能需要将其包装在try / catch中,并采取适当的措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM