in src/Elastic.CommonSchema/Serialization/MetadataDictionaryConverter.cs [56:96]
public override void Write(Utf8JsonWriter writer, MetadataDictionary value, JsonSerializerOptions options)
{
writer.WriteStartObject();
List<MetaDataSerializationFailure>? failures = null;
foreach (var kvp in value)
{
var propertyName = kvp.Key;
if (kvp.Value == null)
{
writer.WritePropertyName(propertyName);
writer.WriteNullValue();
}
else
{
try
{
// The following is not safe
// JsonSerializer.Serialize(writer, kvp.Value, inputType, options);
// If a getter throws an exception we risk not logging anything
var bytes = JsonSerializer.SerializeToUtf8Bytes(kvp.Value, options);
writer.WritePropertyName(propertyName);
writer.WriteRawValue(bytes);
}
catch (Exception e)
{
failures ??= new List<MetaDataSerializationFailure>();
failures.Add(new MetaDataSerializationFailure { Property = propertyName, SerializationFailure = e.Message });
}
}
}
if (failures != null)
{
writer.WritePropertyName("__failures__");
JsonSerializer.Serialize(writer, failures, typeof(List<MetaDataSerializationFailure>), options);
}
writer.WriteEndObject();
}