如何更改列表项的内容类型

How to change the content type of list items

我正在尝试更改文档库中所有根文件夹的内容类型。我什至不确定这是否可能。当我 运行 下面的代码时,我收到 ListItem.ContentType 被写保护的消息...

我的问题是,是否可以完全更改内容类型? 如果是,我该如何使用 CSOM 进行操作?

谢谢

                ContentType ct = list.ContentTypes.GetById("0x0120D520008AE499F0AEB1C647B9D6F0C9D3B7F9F100B56E2AEF9C715540BE5E87A04F54476E");
                context.ExecuteQuery();

                foreach (ListItem item in items)
                {
                    context.Load(item, i => i.DisplayName);
                    context.Load(item, i => i.ContentType);
                    context.Load(ct, i => i.Id);
                    context.ExecuteQuery();

                    if (item.ContentType.Name == "Folder")
                    {
                        Console.WriteLine("Name: " + item.DisplayName + " ContentType:" + item.ContentType.Name);
                        if (item.ContentType.Sealed = true)
                        {
                            item.ContentType.Sealed = false;
                            item.Update();
                            context.ExecuteQuery();

                        }

                        item.ContentType = ct.Id;
                        item.Update();
                        context.ExecuteQuery();
                    }
                }

像这样更新项目内容类型,设置 ContentTypeId 字段值:

                List list = ctx.Web.Lists.GetByTitle("doc2");

                ContentType ct = list.ContentTypes.GetById("0x0120001D61DFC51D574148B41D5DEB19779D19000C2B25DED7B1C34BB491C5BE59765450");
                ctx.Load(ct);
                ctx.ExecuteQuery();
                CamlQuery caml = new CamlQuery();
                ListItemCollection items = list.GetItems(caml);
                ctx.Load(items);
                ctx.ExecuteQuery();
                foreach (ListItem item in items)
                {
                    ctx.Load(item, i => i.DisplayName);
                    ctx.Load(item, i => i.ContentType);
                    ctx.Load(ct, i => i.Id);
                    ctx.ExecuteQuery();

                    if (item.ContentType.Name == "Folder")
                    {
                        item["ContentTypeId"] = ct.Id.ToString();
                        item.Update();
                        ctx.ExecuteQuery();
                    }
                }