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

C#.NET中用GraphServiceClient处理SharePoint多选Choice字段的UntypedArray

高效处理SharePoint多选Choice字段的访问与更新(GraphServiceClient)

场景说明

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:22:11