mirror of
https://github.com/AlexMacocian/Net.Sdk.Web.Extensions.git
synced 2026-07-22 16:59:30 +00:00
41 lines
1.4 KiB
C#
41 lines
1.4 KiB
C#
using AspNetCore.Extensions.Attributes;
|
|
using System.Core.Extensions;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
|
|
namespace AspNetCore.Extensions.Websockets.Converters;
|
|
|
|
public class JsonWebSocketMessageConverter<T> : WebSocketMessageConverter<T>
|
|
{
|
|
private readonly JsonSerializerOptions? jsonSerializerOptions;
|
|
|
|
[DoNotInject]
|
|
public JsonWebSocketMessageConverter()
|
|
{
|
|
}
|
|
|
|
public JsonWebSocketMessageConverter(JsonSerializerOptions options)
|
|
{
|
|
this.jsonSerializerOptions = options.ThrowIfNull();
|
|
}
|
|
|
|
public override T ConvertTo(WebSocketConverterRequest request)
|
|
{
|
|
if (request.Type != System.Net.WebSockets.WebSocketMessageType.Text)
|
|
{
|
|
throw new InvalidOperationException($"Unable to deserialize message. Message is not text");
|
|
}
|
|
|
|
var stringData = Encoding.UTF8.GetString(request.Payload!);
|
|
var objData = JsonSerializer.Deserialize<T>(stringData, this.jsonSerializerOptions);
|
|
return objData ?? throw new InvalidOperationException($"Unable to deserialize message to {typeof(T).Name}");
|
|
}
|
|
|
|
public override WebSocketConverterResponse ConvertFrom(T message)
|
|
{
|
|
var serialized = JsonSerializer.Serialize(message, this.jsonSerializerOptions);
|
|
var data = Encoding.UTF8.GetBytes(serialized);
|
|
return new WebSocketConverterResponse { EndOfMessage = true, Type = System.Net.WebSockets.WebSocketMessageType.Text, Payload = data };
|
|
}
|
|
}
|