Skip to content

Instantly share code, notes, and snippets.

@shimat
Created October 28, 2022 09:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shimat/c24fc0f7fe0f26487dfa2b95422c5c51 to your computer and use it in GitHub Desktop.
Save shimat/c24fc0f7fe0f26487dfa2b95422c5c51 to your computer and use it in GitHub Desktop.
CustomJsonSerializer for OpenSearch
using System.Text.Json;
using System.Text.Json.Serialization;
using OpenSearch.Net;
public class CustomJsonSerializer : IOpenSearchSerializer
{
private static readonly JsonSerializerOptions deserializationOptions = new()
{
NumberHandling = JsonNumberHandling.AllowReadingFromString
};
/// <inheritdoc/>
public T? Deserialize<T>(Stream stream)
=> JsonSerializer.Deserialize<T>(stream, deserializationOptions);
/// <inheritdoc/>
public object? Deserialize(Type type, Stream stream)
=> JsonSerializer.Deserialize(stream, type, deserializationOptions);
/// <inheritdoc/>
public async Task<T?> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default)
=> await JsonSerializer.DeserializeAsync<T>(stream, deserializationOptions, cancellationToken);
/// <inheritdoc/>
public async Task<object?> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default)
=> await JsonSerializer.DeserializeAsync(stream, type, deserializationOptions, cancellationToken);
/// <inheritdoc/>
public void Serialize<T>(T data, Stream stream, SerializationFormatting formatting = SerializationFormatting.None)
=> JsonSerializer.Serialize(stream, data, new JsonSerializerOptions{WriteIndented = (formatting == SerializationFormatting.Indented) });
/// <inheritdoc/>
public Task SerializeAsync<T>(T data, Stream stream, SerializationFormatting formatting = SerializationFormatting.None, CancellationToken cancellationToken = default)
=> JsonSerializer.SerializeAsync(stream, data, new JsonSerializerOptions { WriteIndented = (formatting == SerializationFormatting.Indented) }, cancellationToken);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment