如何正确序列化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文档获取途径
- Visual Studio内置XML注释:将鼠标悬停在SDK的类、方法(比如
CallRecord.Serialize())上,即可查看官方注释说明,很多细节都包含在这里。 - SDK源代码与GitHub仓库:直接查看Microsoft Graph .NET SDK的GitHub仓库,里面的README、Wiki以及代码注释会提供很多官方文档未提及的细节,比如
Serialize()方法的实现逻辑。 - Graph API官方参考文档:虽然是REST API层面的文档,但.NET SDK的类型完全对应REST API的实体,可通过API文档了解每个字段的含义和对应关系,辅助理解SDK类型。
- NuGet包详情页:在NuGet搜索
Microsoft.Graph.Communications,包的详情页包含更新日志、依赖说明和基础使用指引。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

