Microsoft.Graph 4.0.0创建带自定义列列表报id空值错误求助
问题原因
Microsoft.Graph 4.x版本切换为System.Text.Json作为默认序列化组件,默认会序列化所有值为null的属性。你构造的ColumnDefinition对象未赋值Id属性,序列化后的请求体中会携带"id": null字段,而Graph API的列表创建接口要求创建自定义列时不能传入id字段(id由服务端自动生成,且不允许为null),因此触发报错。
解决方案
以下两种方案任选其一即可:
方案1:调整Graph客户端序列化配置(改动最小,推荐)
初始化GraphServiceClient时,配置序列化规则忽略null值,避免null属性被加入请求体:
using Microsoft.Graph; using System.Text.Json; // 配置序列化选项,忽略null值 var jsonOptions = new JsonSerializerOptions { IgnoreNullValues = true, PropertyNameCaseInsensitive = true }; var customSerializer = new Serializer(jsonOptions); // 实例化Graph客户端时传入自定义序列化器 var _client = new GraphServiceClient( authenticationProvider, serializer: customSerializer );
修改后原有的创建逻辑无需改动即可正常运行。
方案2:分两步创建列表(兼容性最强,无需调整全局配置)
先创建不带自定义列的空列表,创建成功后再单独为列表添加自定义列:
// 第一步:创建空文档库 var emptyLibrary = new List() { DisplayName = driveName, ListInfo = new ListInfo { Template = "documentLibrary" } }; var createdLibrary = await _client.Sites[siteId].Lists.Request().AddAsync(emptyLibrary); // 第二步:添加自定义列 var column1 = ColumnsBuilder.TextColumn("Column1", false, true); var column2 = ColumnsBuilder.TextColumn("Column2", false, true); await _client.Sites[siteId].Lists[createdLibrary.Id].Columns.Request().AddAsync(column1); await _client.Sites[siteId].Lists[createdLibrary.Id].Columns.Request().AddAsync(column2);
内容的提问来源于stack exchange,提问作者Kavrat
相关产品推荐
相关产品推荐

