PuneetGarg
Sep 4, 2024
  1837
(5 votes)

Remove Unwanted properties for Headless Implementation using Content Delivery API

While working with Headless, whenever we want to send data to the front end, many properties are also shown in JSON that we don't wish to, which creates a big and unreadable response.

To refactor that we can create Filter which will kick before and after every call.

Example:-

PreSerialization Content filter 

  • This class prevents the serialization of certain properties before the serialization
  • Register that Service as Singleton 
internal class PreSerializationContentFilter  : ContentFilter<IContent>
{
    public override void Filter(IContent content, ConverterContext converterContext)
    {
        content.Property.Remove("TopContentArea");
        content.Property.Remove("MainContentArea");
        content.Property.Remove("BottomContentArea");

        content.Property.Remove("MetaTitle");
        content.Property.Remove("MetaKeywords");
        content.Property.Remove("MetaDescription");
        content.Property.Remove("DisableIndexing");
        content.Property.Remove("EnableNoFollow");
        content.Property.Remove("OgContentType");
        content.Property.Remove("Categories");
    }
}

PostSerialization ApiModelFilter

  • This generic class adds properties to the ContentApiModel after the serialization before sending the request
  • Register that Service as Singleton 
 public class PostSerializationApiModelFilter : ContentApiModelFilter<ContentApiModel>
 {
     public override void Filter(ContentApiModel contentApiModel, ConverterContext converterContext)
     {
         try
         {
             // Set those values below as null, and configure ContentApiOption.IncludeNullValues = false in Initialization
             // then, response data will not include those ones.
             contentApiModel.ContentLink = null;
             contentApiModel.Language = null;
             contentApiModel.ExistingLanguages = null;
             contentApiModel.MasterLanguage = null;
             contentApiModel.ParentLink = null;
             contentApiModel.StartPublish = null;
             contentApiModel.StopPublish = null;
             contentApiModel.RouteSegment = null;
             contentApiModel.Changed = null;
             contentApiModel.Created = null;
             contentApiModel.Saved = null;
             contentApiModel.Status = null;
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
 }

Using these classes you can remove unwanted properties.

Hope that helps !! :-)  

Sep 04, 2024

Comments

Harinarayanan
Harinarayanan Oct 3, 2024 10:53 AM

Nice post, Thanks for sharing.

Ola Andersson
Ola Andersson Jan 10, 2025 10:28 AM

Hi! I can not get this to work with version 3.11.3 of the ContentDeliveryApi beacuse IncludeNullValues is marked as obsolete and casting an error if you try to change it. Is there any solution to this?

PuneetGarg
PuneetGarg Jan 10, 2025 03:24 PM

Hi @ola , use this instead options.IncludeEmptyContentProperties = false;

Please login to comment.
Latest blogs
Why Optimizely's MCP Servers Offering Matters

MCP (Model Context Protocol) is what enables, connecting AI agents directly to enterprise tools. With Optimizely OPAL and Optimizely MCP servers,...

K Khan | Jun 9, 2026

A day in the life of an Optimizely OMVP: Managing Graph search: the native portal and the community plugin

Optimizely Graph has quietly become the search engine sitting underneath most new Optimizely builds. It ships with CMS 13, it's the answer to "what...

Graham Carr | Jun 9, 2026

Extending SelectMany for Multi-Column Checkbox Layouts in Optimizely CMS 12

By default, a SelectMany property is rendered as a vertical checkbox list in the CMS editor. While this works well for a small number of options,...

Sanjay Kumar | Jun 9, 2026

Optimizely CMS (SaaS) MCP Basics

What just shipped Optimizely quietly dropped something significant: a hosted Model Context Protocol (MCP) server for CMS (SaaS). This means your...

Kiran Patil | Jun 9, 2026 |