Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)
If you need to add custom properties to Asset, AssetLink or AssetList models you can do it by implementing custom serializers and switching Sitecore to this custom serializers.
First of all in the project you need to add references to the next libraries:
DFS.dll;
Newtonsoft.Json.dll;
Sitecore.Kernel.dll;
Sitecore.LayoutService.dll;
Implement serializers for Asset, AssetLink and AssetList fields.
using DFS.Data.Fields;
using Newtonsoft.Json;
using Sitecore.Data.Fields;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.FieldSerializers;
public class AssetFieldSerializer : BaseFieldSerializer
{
public AssetFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void WriteValue(Field field, JsonTextWriter writer)
{
AssetField fld = new AssetField(field);
if (fld == null || fld.AssetMetadata == null)
{
return;
}
writer.WriteStartObject();
writer.WritePropertyName("src");
switch (fld.AssetMetadata.AssetTypeId)
{
case 5: // Powerpoint
case 7: // Text
case 8: // DOCX
case 9: // Excel
case 14: // PDF
case 16: // Photoshop
case 17: // Illustrator
case 10: // Indesign
case 11: // Zip
case 15: // Archive
case 18: // Visio
writer.WriteValue(fld.AssetMetadata.RawUrl);
if (!string.IsNullOrWhiteSpace(fld.AssetMetadata.Preview))
{
writer.WritePropertyName("previewUrl");
writer.WriteValue(fld.AssetMetadata.Preview);
}
break;
case 1: // Video
case 2: // Audio
case 4: // Image
default: // etc.
writer.WriteValue(fld.AssetMetadata.GetMediaUrl(fld.Quality));
break;
}
writer.WritePropertyName("assetTypeName");
writer.WriteValue(fld.AssetMetadata.AssetTypeName);
writer.WritePropertyName("assetTypeId");
writer.WriteValue(fld.AssetMetadata.AssetTypeId);
writer.WritePropertyName("alt");
if (fld.AssetItem != null)
{
writer.WriteValue(fld.AssetItem.DisplayName);
}
else
{
writer.WriteValue(fld.AssetMetadata.Name);
}
if (!string.IsNullOrEmpty(fld.Width))
{
writer.WritePropertyName("width");
writer.WriteValue(fld.Width);
}
if (!string.IsNullOrEmpty(fld.Height))
{
writer.WritePropertyName("height");
writer.WriteValue(fld.Height);
}
writer.WriteEndObject();
}
}
using DFS.Data.Fields;
using Newtonsoft.Json;
using Sitecore.Data.Fields;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.FieldSerializers;
public class AssetLinkFieldSerializer : BaseFieldSerializer
{
public AssetLinkFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void WriteValue(Field field, JsonTextWriter writer)
{
AssetlinkField fld = new AssetlinkField(field);
if (fld == null || fld.AssetMetadata == null)
{
return;
}
writer.WriteStartObject();
writer.WritePropertyName("href");
writer.WriteValue(fld.AssetMetadata.GetMediaUrl(fld.Quality));
writer.WritePropertyName("assetTypeName");
writer.WriteValue(fld.AssetMetadata.AssetTypeName);
writer.WritePropertyName("assetTypeId");
writer.WriteValue(fld.AssetMetadata.AssetTypeId);
writer.WritePropertyName("text");
if (fld.AssetItem != null)
{
writer.WriteValue(fld.AssetItem.DisplayName);
}
else
{
writer.WriteValue(fld.AssetMetadata.Name);
}
writer.WriteEndObject();
}
}
using DFS.Data.Fields;
using DFS.Data.Model;
using Newtonsoft.Json;
using Sitecore.Data.Fields;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.FieldSerializers;
public class AssetListFieldSerializer : BaseFieldSerializer
{
public AssetListFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void WriteValue(Field field, JsonTextWriter writer)
{
AssetlistField fld = new AssetlistField(field);
if (fld == null)
{
return;
}
writer.Formatting = Formatting.Indented;
if (fld.Assets.Count > 0)
{
writer.WriteStartArray(); // Write the opening of the "Items" array
foreach (var item in fld.Assets)
{
this.WriteAssetItemValue(item, writer);
}
writer.WriteEndArray(); // Write the closing of the "Items" array.
}
}
private void WriteAssetItemValue(AssetListItem item, JsonTextWriter writer)
{
if (item.AssetMetadata == null)
{
return;
}
writer.WriteStartObject();
writer.WritePropertyName("src");
switch (item.AssetMetadata.AssetTypeId)
{
case 5: // Powerpoint
case 7: // Text
case 8: // DOCX
case 9: // Excel
case 14: // PDF
case 16: // Photoshop
case 17: // Illustrator
case 10: // Indesign
case 11: // Zip
case 15: // Archive
writer.WriteValue(item.AssetMetadata.RawUrl);
if (!string.IsNullOrWhiteSpace(item.AssetMetadata.Preview))
{
writer.WritePropertyName("previewUrl");
writer.WriteValue(item.AssetMetadata.Preview);
}
break;
case 1: // Video
case 2: // Audio
case 4: // Image
default: // etc.
writer.WriteValue(item.AssetMetadata.GetMediaUrl(item.Quality));
break;
}
writer.WritePropertyName("assetTypeName");
writer.WriteValue(item.AssetMetadata.AssetTypeName);
writer.WritePropertyName("assetTypeId");
writer.WriteValue(item.AssetMetadata.AssetTypeId);
writer.WritePropertyName("alt");
writer.WriteValue(item.AssetMetadata.Name);
writer.WriteEndObject();
}
}
Implement GetFieldSerializer for Asset, AssetLink and AssetList serializers.
using Sitecore.Diagnostics;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.Pipelines.GetFieldSerializer;
public class GetAssetFieldSerializer : BaseGetFieldSerializer
{
public GetAssetFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void SetResult(GetFieldSerializerPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
args.Result = new AssetFieldSerializer(this.FieldRenderer);
}
}
using Sitecore.Diagnostics;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.Pipelines.GetFieldSerializer;
public class GetAssetLinkFieldSerializer : BaseGetFieldSerializer
{
public GetAssetLinkFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void SetResult(GetFieldSerializerPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
args.Result = new AssetLinkFieldSerializer(this.FieldRenderer);
}
}
using Sitecore.Diagnostics;
using Sitecore.LayoutService.Serialization;
using Sitecore.LayoutService.Serialization.Pipelines.GetFieldSerializer;
public class GetAssetListFieldSerializer : BaseGetFieldSerializer
{
public GetAssetListFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void SetResult(GetFieldSerializerPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
args.Result = new AssetListFieldSerializer(this.FieldRenderer);
}
}
Build the project and copy dll to Sitecore bin folder
Open Sitecore website folder (usually C:\inetpub\wwwroot\MySitecoreWebsite) and find \App_Config\Sitecore\LayoutService\Sitecore.LayoutService.Jss.Digizuite.config file.
Open this file in any text editor, and switch processors to just created ones.