MSGraphSDK v5 的枚举的 ASP.NET 模型绑定失败

问题描述 投票:0回答:1

有人需要将 JSON 文件发送到我的 ASP.NET Web 应用程序,代表一个 Microsoft.Graph.Beta.Models.ImportedDeviceIdentity

这是我的控制器操作:

 [Consumes("application/json")]
 public IActionResult HandleImportDeviceIdentity([FromBody] Microsoft.Graph.Beta.Models.ImportedDeviceIdentity importDeviceIdentity)
 {
     ...
     return Ok();
 }

我将 MSGraphSDKDotNet v5 与 ASP.NET (.NET Core 7) 结合使用。

如果我发送这样的 JSON 文件:

    {
        "importedDeviceIdentityType": "serialNumber",
        "importedDeviceIdentifier": "TEST9999",
        "description": "TEST999"
    }

...那么我的 importDeviceIdentity 对象未正确初始化(它被设置为 null)。

但是如果我使用 importedDeviceIdentityType 枚举的数值,例如:

    {
        "importedDeviceIdentityType": 2,
        "importedDeviceIdentifier": "TEST9999",
        "description": "TEST999"
    }

...一切正常。

我无法理解为什么 ASP.Net 无法将 Enum 字符串表示形式绑定到整数值,即使 ImportedDeviceIdentity 对象继承自 IParsable。

我不想编写自定义 JSON 转换器,也不想使用廉价的解决方案,例如绑定到字符串并使用对象方法进行反序列化(CreateFromDiscriminatorValue 和 Co...)

似乎我在 Enum 上缺少类似 [JsonConverter(typeof(JsonStringEnumConverter))] 的东西,但由于该类不是我自己定义的,所以我不能这样做。我的控制器将收到的有效负载上也没有“@odata.type”属性(不确定这是否相关)。

如何在模型绑定步骤中正确转换字符串表示形式?

c# asp.net-core json-deserialization microsoft-graph-sdks
1个回答
0
投票

默认情况下,枚举被序列化为数字。要将枚举名称序列化为字符串,请使用

JsonStringEnumConverter

在 Program.cs 中全局注册它,如下所示:

builder.Services.AddControllersWithViews().AddJsonOptions(opts =>
{
    var enumConverter = new JsonStringEnumConverter();
    opts.JsonSerializerOptions.Converters.Add(enumConverter);
});
© www.soinside.com 2019 - 2024. All rights reserved.