mirror of
https://github.com/AlexMacocian/Net.Sdk.Web.Extensions.git
synced 2026-07-26 00:45:24 +00:00
Add project files.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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 };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user