You can use this validator to check if there are issues when indexing the content with Episerver Find.
Read my blog here
using EPiServer.Core; | |
using EPiServer.Find; | |
using EPiServer.Find.Cms; | |
using EPiServer.Find.Framework; | |
using EPiServer.Find.Helpers; | |
using EPiServer.Find.Json; | |
using EPiServer.Reference.Commerce.Site.Features.Product.Models; | |
using EPiServer.Validation; | |
using Newtonsoft.Json; | |
public class SerializationValidator : IValidate<IContent> | |
{ | |
IEnumerable<ValidationError> IValidate<IContent>.Validate(IContent content) | |
{ | |
JsonSerializer jsonSerializer = Serializer.CreateDefault(); | |
Action<JsonSerializer> customizeSerializer = SearchClient.Instance.CustomizeSerializer; | |
customizeSerializer(obj: jsonSerializer); | |
IClientConventions defaultConventions = SearchClient.Instance.Conventions; | |
if (defaultConventions.ContractResolver.IsNotNull()) | |
{ | |
jsonSerializer.ContractResolver = defaultConventions.ContractResolver; | |
} | |
if (defaultConventions.CustomizeSerializer.IsNotNull()) | |
{ | |
defaultConventions.CustomizeSerializer(obj: jsonSerializer); | |
} | |
try | |
{ | |
jsonSerializer.Serialize(value: content); | |
} | |
catch (SelfReferencingLoopException selfReferencingLoopException) | |
{ | |
string message = selfReferencingLoopException.ExplainIndexException(); | |
return new[] | |
{ | |
new ValidationError | |
{ | |
ErrorMessage = message, | |
PropertyName = selfReferencingLoopException.GetType().Name, | |
Severity = ValidationErrorSeverity.Warning, | |
ValidationType = ValidationErrorType.Unspecified | |
} | |
}; | |
} | |
catch (MaxSerializationDepthExceededException maxSerializationDepthExceededException) | |
{ | |
return new[] | |
{ | |
new ValidationError | |
{ | |
ErrorMessage = | |
maxSerializationDepthExceededException | |
.ExplainIndexException(), | |
PropertyName = | |
maxSerializationDepthExceededException.GetType().Name, | |
Severity = ValidationErrorSeverity.Warning, | |
ValidationType = ValidationErrorType.Unspecified | |
} | |
}; | |
} | |
catch (Serializer.JsonItemSerializationException jsonItemSerializationException) | |
{ | |
return new[] | |
{ | |
new ValidationError | |
{ | |
ErrorMessage = | |
jsonItemSerializationException.ExplainIndexException(), | |
PropertyName = jsonItemSerializationException.GetType().Name, | |
Severity = ValidationErrorSeverity.Warning, | |
ValidationType = ValidationErrorType.Unspecified | |
} | |
}; | |
} | |
catch (JsonSerializationException jsonSerializationException) | |
{ | |
return new[] | |
{ | |
new ValidationError | |
{ | |
ErrorMessage = | |
jsonSerializationException.ExplainIndexException(), | |
PropertyName = jsonSerializationException.GetType().Name, | |
Severity = ValidationErrorSeverity.Warning, | |
ValidationType = ValidationErrorType.Unspecified | |
} | |
}; | |
} | |
return new ValidationError[0]; | |
} | |
} |