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

如何正确序列化GraphClient返回结果及查询.Net SDK文档

解决Graph CallRecord序列化字段丢失及SDK文档问题

一、实现无字段丢失的序列化

方法1:使用CallRecord自带的Serialize()方法

这是最省心的方案,SDK内置的Serialize()方法专门处理了Graph类型的多态问题,能完整序列化所有运行时子类的属性,不会丢失CallRecord.Sessions.Caller.Identity这类字段:

// 通过GraphClient获取CallRecord实例
var callRecord = await graphClient.Communications.CallRecords["{callRecordId}"].GetAsync();
// 直接调用Serialize()得到完整JSON字符串
string fullSerializedJson = callRecord.Serialize();

该方法内部封装了Graph SDK的自定义序列化逻辑,自动处理所有父类对应的子类属性,无需额外配置。

方法2:配置System.Text.Json支持多态序列化

如果必须使用自定义序列化逻辑,需要手动配置JsonSerializerOptions,添加多态类型映射并开启字段序列化(SDK部分数据存储在字段而非属性中):

var serializerOptions = new JsonSerializerOptions
{
    IncludeFields = true,
    WriteIndented = true,
    Converters =
    {
        new JsonStringEnumConverter(),
        // 添加Identity的常见派生类型映射
        new JsonDerivedType(typeof(UserIdentity), "user"),
        new JsonDerivedType(typeof(ApplicationIdentity), "application"),
        // 添加CallRecordSession等其他需要的派生类型
        new JsonDerivedType(typeof(CallRecordSession), "session")
    }
};

string json = JsonSerializer.Serialize(callRecord, serializerOptions);

注意:这种方法需要根据实际用到的所有子类手动添加映射,否则对应类型的属性仍会丢失,维护成本较高。

二、Graph .NET SDK文档获取途径

  1. Visual Studio内置XML注释:将鼠标悬停在SDK的类、方法(比如CallRecord.Serialize())上,即可查看官方注释说明,很多细节都包含在这里。
  2. SDK源代码与GitHub仓库:直接查看Microsoft Graph .NET SDK的GitHub仓库,里面的README、Wiki以及代码注释会提供很多官方文档未提及的细节,比如Serialize()方法的实现逻辑。
  3. Graph API官方参考文档:虽然是REST API层面的文档,但.NET SDK的类型完全对应REST API的实体,可通过API文档了解每个字段的含义和对应关系,辅助理解SDK类型。
  4. NuGet包详情页:在NuGet搜索Microsoft.Graph.Communications,包的详情页包含更新日志、依赖说明和基础使用指引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:18