Take the community feedback survey now.

Optimizely Graph (CMS 12): Support for IList<T> / PropertyList<T> with POCOs?

Vote:
 

Hi all,

we are using Optimizely CMS 12 with Optimizely Graph and have a content type that contains a list property based on PropertyList<T>:

public class MyItem {
   public string Label { get; set; }
   public int Value { get; set; } }
public class MyPage : PageData {
   public virtual IList<MyItem> Items { get; set; }
}

In the CMS editor this works fine, but in Optimizely Graph the Items property does not appear in the schema after a full sync, so we cannot query it via GraphQL.

My questions:

  1. Is PropertyList<T> / IList<T> with a POCO (or T : IContent) officially supported for Optimizely Graph schema generation?

  2. If not, is there any recommended pattern (e.g. Conventions API, block-based model, custom data sync) to make these list items available in Graph?

  3. Is there any plan on the roadmap to support IList<T> / PropertyList<T> directly in Optimizely Graph, or should we avoid this pattern for headless use cases?

We tried adding it over

  1. services.AddContentGraph(options =>
    {
        options.SyncReferencingContents = true;
        options.IncludeInheritanceInContentType = true;
        options.Include.ContentTypes = new[]
        {
  2. conventionRepository.ForInstancesOf<MyType>()
                ?.IncludeField(field => field.Items!)
  3. conventionRepository.ForInstancesOf<MyType>()
                ?.Set(field => field.Items, IndexingType.Queryable)

Thanks in advance for any guidance or best practices!

#341194
Edited, Dec 02, 2025 11:45
Vote:
 

IList<T> Properties Not Synchronized to ContentGraph - A Debugging Discovery

The Investigation

While debugging why certain IList<Items> properties weren't appearing in the ContentGraph schema, I traced the issue to the ListPropertyConverterProvider class.

The Finding

In the Resolve method of ListPropertyConverterProvider, there's a type check that determines whether a property should be converted:

public IPropertyConverter Resolve(PropertyData propertyData)
{
    return !(propertyData is PropertyCollection) ? null : ...
}

The issue: When propertyData represents an IList<T> property, it's not recognized as a PropertyCollection. The type check fails, the method returns null, and consequently no converter is assigned to handle this property type.

The Result

Without a valid IPropertyConverter, these properties are excluded from the ContentGraph schema entirely. They don't appear in the GraphQL API and cannot be queried.

The Question

Is this a bug or a missing implementation?

It seems counterintuitive that list-based properties would be explicitly filtered out. The ListPropertyConverter exists and appears designed to handle collection types, but the resolver prevents it from ever being used for IList<T> properties.

Should IList<T> properties be supported, or is this intentional behavior that requires a workaround (e.g., using PropertyCollection or implementing a custom IPropertyConverterProvider)?

#341214
Dec 03, 2025 14:26
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.