升级至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
相关产品推荐
相关产品推荐

