C#.NET中用GraphServiceClient处理SharePoint多选Choice字段的UntypedArray
场景说明
使用C#.NET的GraphServiceClient操作SharePoint ListItem时,通过IDictionary<string, object>类型的AdditionalData访问多选Choice字段EnvironmentTypes,得到的是Microsoft.Kiota.Abstractions.Serialization.UntypedArray类型。现有代码通过序列化输出分号分隔的字符串,想找更友好高效的访问和更新方式:
foreach (var environmentType in AdditionalData["EnvironmentTypes"].GetValue()) Console.WriteLine(KiotaJsonSerializer.SerializeAsString(environmentType));
一、优化访问方式
UntypedArray本身实现了IEnumerable<object>,可以直接转换为字符串列表,无需序列化再分割,减少不必要的性能开销:
// 将UntypedArray直接转换为字符串列表 var environmentTypes = ((UntypedArray)AdditionalData["EnvironmentTypes"]).Cast<string>().ToList(); // 直接遍历访问每个选项 foreach (var type in environmentTypes) { Console.WriteLine(type); }
二、高效更新字段值
更新时无需手动处理UntypedArray,直接构造字符串列表赋值给AdditionalData即可,GraphServiceClient会自动适配SharePoint的多选格式:
// 构造新的多选选项列表 var newEnvironmentTypes = new List<string> { "Production", "Staging" }; // 赋值到AdditionalData AdditionalData["EnvironmentTypes"] = newEnvironmentTypes; // 调用PatchAsync更新ListItem await graphServiceClient.Sites["site-id"].Lists["list-id"].Items["item-id"].PatchAsync(new ListItem { AdditionalData = AdditionalData });
如果需要基于原有值修改,直接操作已转换的列表再赋值回去:
// 在原有列表基础上新增选项 environmentTypes.Add("Development"); // 移除指定选项 environmentTypes.Remove("Staging"); // 更新回AdditionalData AdditionalData["EnvironmentTypes"] = environmentTypes;
内容的提问来源于stack exchange,提问作者c0D3l0g1c
相关产品推荐
相关产品推荐

