JosefNemec/Playnite · error · NotSupportedException

property type is not supported in this collection.

Error message

{property.GetType()} property type is not supported in this collection.

What it means

Thrown as NotSupportedException by ItemCollection<TItem>.GetOrGenerate(MetadataProperty) when the provided MetadataProperty is neither a MetadataNameProperty nor a MetadataIdProperty. The collection only knows how to resolve items by name (creating a new instance if not found) or by database ID. Any other MetadataProperty subtype is unsupported.

Solutions

  1. Ensure all MetadataProperty instances passed to GetOrGenerate are either MetadataNameProperty or MetadataIdProperty.
  2. If using a custom MetadataProperty type, convert it to MetadataNameProperty before calling GetOrGenerate.
  3. Update Playnite to the latest version if the SDK introduced new property types that should be supported.
  4. Add a pre-check: if (property is not MetadataNameProperty and not MetadataIdProperty) convert or skip.

Example fix

// before — passing an unsupported property type
var item = collection.GetOrGenerate(myCustomProperty);

// after — normalize to a supported type before calling
MetadataProperty normalized = myCustomProperty switch
{
    MetadataNameProperty np => np,
    MetadataIdProperty ip => ip,
    _ => new MetadataNameProperty(myCustomProperty.ToString())
};
var item = collection.GetOrGenerate(normalized);
Defensive patterns

Strategy: type-guard

Validate before calling

if (property is not MetadataNameProperty and not MetadataIdProperty)
{
    logger.Warn($"Unsupported property type {property.GetType()} for GetOrGenerate.");
    property = new MetadataNameProperty(property.ToString());
}

Type guard

static bool IsSupportedMetadataProperty(MetadataProperty property)
{
    return property is MetadataNameProperty or MetadataIdProperty;
}

Prevention

When it happens

Trigger: A metadata plugin or import process passes a custom MetadataProperty subclass to GetOrGenerate. The SDK was extended with new MetadataProperty types but the collection was not updated. A serialized MetadataProperty deserialized into an unexpected concrete type.

Common situations: A third-party metadata provider returns a proprietary MetadataProperty subclass. A plugin SDK version mismatch where newer property types are passed to an older collection implementation. Incorrect serialization/deserialization that loses the concrete type information.

Related errors


AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13). Data as JSON: /api/errors/a741d9f5ca221eba. Report an issue: GitHub.

Appendix: source

Thrown at source/Playnite/Database/Collections/ItemCollection.cs:270

        {
            if (property is MetadataNameProperty nameProp)
            {
                var existingItem = this.FirstOrDefault(a => GameFieldComparer.StringEquals(a.Name, nameProp.Name));
                if (existingItem != null)
                {
                    return existingItem;
                }
                else
                {
                    return typeof(TItem).CrateInstance<TItem>(nameProp.Name);
                }
            }
            else if (property is MetadataIdProperty idProp)
            {
                return this[idProp.Id];
            }

            throw new NotSupportedException($"{property.GetType()} property type is not supported in this collection.");
        }

        public virtual IEnumerable<TItem> GetOrGenerate(IEnumerable<MetadataProperty> properties)
        {
            var res = new List<TItem>();
            foreach (var property in properties)
            {
                res.Add(GetOrGenerate(property));
            }

            return res;
        }

        public virtual TItem Add(MetadataProperty property)
        {
            if (property is MetadataNameProperty nameProp)
            {
                return Add(nameProp.Name, GameFieldComparer.FieldEquals);

View on GitHub (pinned to 5911f4e964)