首页 > 解决方案 > 无法将 MS Graph 消息转换为 EventMessage

问题描述

我们有一个 .NET Core 应用程序,它通过 Microsoft Graph 检查新的日历会议请求,然后解析事件信息。这个应用程序在过去一年一直在工作,最近(最好的猜测是 7 月 1 日)停止工作。以下代码使用MS Graph .NET 库版本 1.15.0 来请求消息和事件数据,并将其转换为 EventMessage。

public async Task<(List<Event>, DateTimeOffset?)> GetCalendarEventsCreatedSince(DateTimeOffset? lastRetrievalDate)
{
    var lastRetrievalDateString = lastRetrievalDate.Value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", null as DateTimeFormatInfo);
    var eventMessages = await this._graphServiceClient.Me.Messages.Request()
        .Top(50)
        .Filter($"createdDateTime gt {lastRetrievalDateString} and microsoft.graph.eventMessage/meetingMessageType eq 'meetingRequest'")
        .Expand("microsoft.graph.eventMessage/event, attachments")
        .GetAsync();

    foreach (var eventMessage in eventMessages)
    {
        var calEvent = (eventMessage as EventMessage)?.Event;
        ...
    }
    ...
}

问题是(eventMessage as EventMessage)已经开始返回 null,我们无法确定原因。sdk v1.15 中的an 特有的字段EventMessage是MeetingMessageType 和Event,这两个都是返回的。

我们尝试过:

foreach (var eventMessage in eventMessages)
{
    if (eventMessage.AdditionalData.TryGetValue("event", out var eventData))
    {
        var calEvent = eventData as Event;
    }
}
foreach (var eventMessage in eventMessages)
{
    var individualMessage = await this._graphServiceClient.Me.Messages[eventMessage.Id].Request().GetAsync();
    var calEvent = individualMessage as EventMessage;
}

我们感谢任何想法或想法——谢谢!

标签: .net-coremicrosoft-graph-apimicrosoft-graph-sdks

解决方案


我们不确定为什么会出现这种情况,但这是我们升级到 Microsoft Graph .NET 库 v3.8.0 后的解决方案。

“事件”属性存在于 上eventMessage.AdditionalData,但其值为 类型Newton.Json.JObject。我们将 JObject 转换为事件,然后我们可以继续。

foreach (var eventMessage in eventMessages)
{
    if (eventMessage.AdditionalData.TryGetValue("event", out var eventData))
    {
        var calEvent = (eventData as JObject)?.ToObject<Event>();
        ...
    }
}

如果有人对为什么突然需要此解决方案有任何线索,请告诉我们。


推荐阅读