使用System.Text.Json.JsonSerializer反序列化为ProblemDetails时出错。 .Net Core 3.0

考虑以下json:

{
    "title": "SOME TITEL","status": 500,"detail": "Some detail","errors": [
        {
            "Parameter": "SOME VALUE","Code": "SOME CODE","Message": "SOME MESSAGE","Details": "SOME EXTRA DetaILS"
        }
    ]
}

它是由API响应生成的,该API响应构造了这样的问题详细信息:

var problemDetails = new ProblemDetails
{
    Status = StatusCodes.Status500InternalServerError;
    Detail = "DetaIL";
    Title = "TITLE";
};

var customClass = new CustomCalss
{
    Code = "INTERNAL_SERVER_ERROR",Message = "Some message",Details = "Extra details"
};

problemDetails.Extensions.Add(new keyvaluepair<string,object>("errors",new [] { customClass }));

当尝试使用System.Text.JsonSerialiser将json反序列化为问题详细信息时,我发现了以下问题:

  • 状态,代码和标题未反序列化到问题详细信息属性,它们为空
  • 扩展数据不会反序列化。

我正在测试这种行为:

var json = @"{
                        ""title"": ""SOME TITLE"",""status"": 500,""detail"": ""Some detail"",""errors"": [
                            {
                                ""Parameter"": null,""Code"": ""SOME CODE"",""Message"": ""SOME MESSAGE"",""Details"": ""SOME EXTRA DetaILS""
                            }
                        ]
                    }";
var result = JsonSerializer.Deserialize<ProblemDetails>(json);
Assert.NotNull(result.Detail);
Assert.NotNull(result.Title);

var customClass = Assert.IsType<CustomCalss[]>(result.Extensions["errors"]);
var error = customClass.First();
Assert.Equal("INTERNAL_SERVER_ERROR",error.Code);

有什么见解吗?

ding1988ding 回答:使用System.Text.Json.JsonSerializer反序列化为ProblemDetails时出错。 .Net Core 3.0

C#是区分大小写的语言,JSON字符串有问题,密钥必须与目标类的属性完全相同。我将“标题”更改为“标题”,然后获得了正确的值,在此附加以供您参考:

Screenshot from my test project

11/20更新:

没有注意到它是MVC内部类,我们现在可以在本地框中简单地重现此问题,但是可以在线检查源代码和已知问题,那里不存在相关问题。因此,我报告了此问题的新错误,在此附上供您参考

https://github.com/aspnet/AspNetCore/issues/17250

11月22日更新: 已确认这是ASP.NET Core 3.0中的错误,并已在3.1版本中修复,请升级到3.1-preview2。或者,您可以根据3.1中的实现指定自定义JsonConverter,作为反序列化时传递的JsonSerializerOptions的一部分-https://github.com/aspnet/AspNetCore/blob/release/3.1/src/Mvc/Mvc.Core/src/Infrastructure/ValidationProblemDetailsJsonConverter.cs

本文链接:https://www.f2er.com/3095576.html

大家都在问