C# .NET Graph SDK更新Sharepoint Online列表项值

C# .NET Graph SDK更新Sharepoint Online列表项值,c#,microsoft-graph-api,sharepoint-online,microsoft-graph-sdks,C#,Microsoft Graph Api,Sharepoint Online,Microsoft Graph Sdks,在将列表项上载到列表后,我正在尝试向列表项上的自定义列添加值。我可以将项目放入列表中,我可以查询列表并获取项目的数据,但是当我尝试为额外字段添加数据时,我得到以下Microsoft.SharePoint.Client.InvalidClientQueryException错误: 找不到没有类型名称的值,并且没有可用的预期类型。 当指定模型时,有效负载中的每个值必须具有一个类型,该类型可以是 在有效负载中指定,由调用方显式指定或从父值隐式推断 我不确定错误消息所指的值或模型。这是我的代码: var

在将列表项上载到列表后,我正在尝试向列表项上的自定义列添加值。我可以将项目放入列表中,我可以查询列表并获取项目的数据,但是当我尝试为额外字段添加数据时,我得到以下
Microsoft.SharePoint.Client.InvalidClientQueryException
错误:

找不到没有类型名称的值,并且没有可用的预期类型。 当指定模型时,有效负载中的每个值必须具有一个类型,该类型可以是 在有效负载中指定,由调用方显式指定或从父值隐式推断

我不确定错误消息所指的值或模型。这是我的代码:

var item = await graphClient
    .Drives[driveId]
    .Root.ItemWithPath(fileName)
    .ListItem.Request()
    .Select("WebURL,Fields,SharepointIds")
    .Expand("Fields")
    .GetAsync();

var fieldVals = await graphClient
    .Sites[SPUrl + ":"]
    .Sites[SpPath + ":"]
    .Lists[libId]
    .Items[item.SharepointIds.ListItemId]
    .Fields
    .Request()
    .GetAsync();

fieldVals.AdditionalData.Add("Phase",
    JsonConvert.SerializeObject(tags));

await graphClient
    .Drives[driveId]
    .Root
    .ItemWithPath(fileName)
    .ListItem
    .Fields
    .Request()
    .UpdateAsync(fieldVals);
最初我在执行
fieldVals.AdditionalData.Add()
时,我有一个“阶段”和一个列表(字符串),这导致了一个关于未设置OData字段类型的错误,但我在文档中没有找到说明预期OData字段值的任何地方。我尝试将其设置为microsoft.graph.fieldValueSet,但没有成功

我正在尝试更新允许多选作为复选框的选项列。

对于多选字段类型,实际上,
odata.type
注释在请求负载中是必需的,下面是一个如何指定它的示例:

PATCH https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items/{item-id}/


{
  "fields": {
    "<ChoiceFieldName>@odata.type": "Collection(Edm.String)",
    "<ChoiceFieldName>":["<val1>","<val2>"]
  }
}
参考资料


谢谢,瓦迪姆。那很有帮助。虽然当我尝试使用这种方法时,我仍然会得到一个错误,只是一个不同的错误。{Code:generalExceptionMessage:发生未指定的错误。SDK生成的内部错误}请求:PATCH/v1.0/sites/{site id}/lists/{list id}/items/208 HTTP/1.1负载:{“fields”:{”Phase@odata.type“:“集合(Edm.String)”,“阶段”:[“可访问性评估”,“修订”]}}Nevermind。这很有效。这个问题似乎仅限于那个图书馆。一旦我删除了它并重新创建了库,一切都很好。再次感谢!
var choiceVals = new []{ "Cat1", "Cat2"};

await graphClient.Sites[siteId].Lists[listId].Items[itemId].Request().UpdateAsync(new ListItem()
{
      Fields = new FieldValueSet
      {
            AdditionalData = new Dictionary<string, object>
            {
                { "Categories@odata.type", "Collection(Edm.String)" },
                { "Categories", choiceVals }
            }
      }
 });