Adicione Contentype no SharePoint 2013 usando c # [CSOM]

Adicionar um contentype no sharepoint é um pouco trickey para mim no início, eu não consigo entender muito bem, como sempre a documentação da Microsoft é realmente uma porcaria e não está completa e assim e assim.
O código fala mais alto do que funciona, então aqui está,

public void addContentType(ClientContext context, Web web, String cntTypes)
{
dynamic cntJSON = Newtonsoft.Json.JsonConvert.DeserializeObject(cntTypes);
foreach (var ctItem in cntJSON)
{
ContentTypeCollection ContType = web.ContentTypes;
ContentTypeCreationInformation msnContType = new ContentTypeCreationInformation();
msnContType
.Name = ctItem.Name;
msnContType
.Description = ctItem.Description;
msnContType
.Group = ctItem.Group;
if (ctItem.Type == "docset")
{
msnContType
.ParentContentType = web.ContentTypes.GetById("0x0120D520");
}
ContentType newCntType = ContType.Add(msnContType);
context
.ExecuteQuery();
web
.Update();
Console.WriteLine(ctItem.Name + " content type created successfully");
}
}
}

deixe-me explicar o processo para você,

  1. ContentTypeCollection – retém a coleção de tipo de conteúdo do site conforme abaixo

    ContentTypeCollection siteContType = web.ContentTypes;
  2. ContentTypeCreationInformation – Contém as informações de tipo de conteúdo recém-criadas, como nome, descrição e outras propriedades.

  3. crie um novo tipo de conteúdo com ContentTypeCreationInformation como abaixo

    ContentTypeCreationInformation newContType = new ContentTypeCreationInformation();
  4. Em seguida, adicione as propriedades necessárias conforme abaixo,

    msnContType.Name = "IronMan";
    msnContType
    .Description = "Tony Stark Inc.";
    msnContType
    .Group = "Super Heros";
  5. Se você deseja criar o tipo de conteúdo docset, você precisa adicionar o ParentContentType conforme abaixo,

    newContType.ParentContentType = web.ContentTypes.GetById("0x0120D520");

    FYI 0x0120D520 é o id do docset contenttype.

  6. Adicionar contentype recém-criado à coleção de tipo de conteúdo do site conforme abaixo

    ContentType newCntType = ContType.Add(msnContType);
  7. Salve suas alterações,

    context.ExecuteQuery();
    web
    .Update();

Sinta-se à vontade para compartilhar se achar que existe uma maneira melhor de adicionar tipos de conteúdo.