You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Microsoft Graph API 5.*后Event枚举属性反序列化失败

Microsoft Graph API 5.x 批量请求事件反序列化问题

我将原本基于Microsoft Graph API 4.37版本运行正常的应用升级到最新5.x版本后,使用专用请求构建器的核心代码可以正常运行:

var multipleEvents = (await graphClient.Me.Calendar.CalendarView.GetAsync()).Value;
var singleEvent = await graphClient.Me.Calendar.Events["Id of event"].GetAsync();

但在批量请求按ID获取不同事件的场景中,遇到了响应解析问题:

  • 4.37版本中使用 graphClient.HttpProvider.Serializer.DeserializeObject<Event>(jsonFromResponceContent) 解析响应
  • 升级到5.x后,HttpProvider 和 ISerializer 已不存在,于是改用:
var options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true };
var @event = System.Text.Json.JsonSerializer.Deserialize<Event>(jsonFromResponceContent, options);

但反序列化失败,报错:"The JSON value could not be converted to System.Nullable1[Microsoft.Graph.Models.Importance]. Path: $.importance ...."。只有通过$select排除所有*枚举类型属性*或包含枚举子属性的类时,反序列化才会成功;一旦包含importance、location或body`这类属性,就会在第一个枚举属性处失败。

通过添加JsonStringEnumConverter后,枚举类型的反序列化问题已解决:

options.Converters.Add(new JsonStringEnumConverter());

目前仅剩Recurrence属性的反序列化问题未解决,以下是当前获取并解析JSON的简化代码:

var options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true };
options.Converters.Add(new JsonStringEnumConverter());
               
var batchRequestContent = new BatchRequestContent(GraphClient);
myBatchRequestSteps.ForEach(x => batchRequestContent.AddBatchRequestStep(x));
var batchResponseContent = await GraphClient.Batch.PostAsync(batchRequestContent);
var responces = await batchResponseContent.GetResponsesAsync();
foreach (var responce in responces.Values)
{
    var json = await responce.Content.ReadAsStringAsync();
    var myEvent = System.Text.Json.JsonSerializer.Deserialize<Event>(json, options);
}

内容的提问来源于stack exchange,提问作者Aidas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:18:26