Skip to content

Add object based Serialize overloads to Serializer #156

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions src/Elastic.Transport/Components/Serialization/Serializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,25 @@ public abstract class Serializer
// TODO: Overloads taking a Memory<T>/Span<T>??

/// <summary> Deserialize <paramref name="stream"/> to an instance of <paramref name="type"/> </summary>
public abstract object Deserialize(Type type, Stream stream);
public abstract object? Deserialize(Type type, Stream stream);

/// <summary> Deserialize <paramref name="stream"/> to an instance of <typeparamref name="T" /></summary>
public abstract T Deserialize<T>(Stream stream);

/// <inheritdoc cref="Deserialize"/>
public abstract ValueTask<object> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default);
public abstract ValueTask<object?> DeserializeAsync(Type type, Stream stream, CancellationToken cancellationToken = default);

/// <inheritdoc cref="Deserialize"/>
public abstract ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default);

// TODO: Overloads for (object?, Type) inputs
/// <inheritdoc cref="Serialize{T}"/>
public abstract void Serialize(
object? data,
Type type,
Stream stream,
SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default
);

/// <summary>
/// Serialize an instance of <typeparamref name="T"/> to <paramref name="stream"/> using <paramref name="formatting"/>.
Expand All @@ -43,7 +50,20 @@ public abstract class Serializer
/// Formatting hint. Note that not all implementations of <see cref="Serializer"/> are able to
/// satisfy this hint, including the default serializer that is shipped with 8.0.
/// </param>
public abstract void Serialize<T>(T data, Stream stream, SerializationFormatting formatting = SerializationFormatting.None);
public abstract void Serialize<T>(
T data,
Stream stream,
SerializationFormatting formatting = SerializationFormatting.None
);

/// <inheritdoc cref="Serialize{T}"/>
public abstract Task SerializeAsync(
object? data,
Type type,
Stream stream,
SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default
);

/// <inheritdoc cref="Serialize{T}"/>
public abstract Task SerializeAsync<T>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,26 @@ public override ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToke
}

/// <inheritdoc />
public override void Serialize<T>(T data, Stream writableStream,
public override void Serialize<T>(T data, Stream stream,
SerializationFormatting formatting = SerializationFormatting.None) =>
JsonSerializer.Serialize(writableStream, data, GetJsonSerializerOptions(formatting));
JsonSerializer.Serialize(stream, data, GetJsonSerializerOptions(formatting));

/// <inheritdoc />
public override void Serialize(object? data, Type type, Stream stream, SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default) =>
JsonSerializer.Serialize(stream, data, type, GetJsonSerializerOptions(formatting));

/// <inheritdoc />
public override Task SerializeAsync<T>(T data, Stream stream,
SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default) =>
JsonSerializer.SerializeAsync(stream, data, GetJsonSerializerOptions(formatting), cancellationToken);

/// <inheritdoc />
public override Task SerializeAsync(object? data, Type type, Stream stream, SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default) =>
JsonSerializer.SerializeAsync(stream, data, type, GetJsonSerializerOptions(formatting), cancellationToken);

#endregion Serializer

/// <summary>
Expand Down
Loading