diff --git a/DysonNetwork.Shared/Cache/JsonCacheSerializer.cs b/DysonNetwork.Shared/Cache/JsonCacheSerializer.cs index 9f289d5..31d13fd 100644 --- a/DysonNetwork.Shared/Cache/JsonCacheSerializer.cs +++ b/DysonNetwork.Shared/Cache/JsonCacheSerializer.cs @@ -1,16 +1,31 @@ using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; +using DysonNetwork.Shared.Data; +using NodaTime; +using NodaTime.Serialization.SystemTextJson; namespace DysonNetwork.Shared.Cache; -public class JsonCacheSerializer(JsonSerializerOptions? options = null) : ICacheSerializer +public class JsonCacheSerializer : ICacheSerializer { - private readonly JsonSerializerOptions _options = options ?? new JsonSerializerOptions(JsonSerializerDefaults.Web) - { - // Customize as needed (NodaTime, camelCase, converters, etc.) - WriteIndented = false - }; + private readonly JsonSerializerOptions _options; - // Customize as needed (NodaTime, camelCase, converters, etc.) + public JsonCacheSerializer() + { + _options = new JsonSerializerOptions + { + TypeInfoResolver = new DefaultJsonTypeInfoResolver + { + Modifiers = { JsonExtensions.UnignoreAllProperties() }, + }, + ReferenceHandler = ReferenceHandler.Preserve, + NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals, + Converters = { new ByteStringConverter() } + }; + _options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); + _options.PropertyNameCaseInsensitive = true; + } public string Serialize(T value) => JsonSerializer.Serialize(value, _options); diff --git a/DysonNetwork.Shared/Cache/MessagePackCacheSerializer.cs b/DysonNetwork.Shared/Cache/MessagePackCacheSerializer.cs index 2420c59..ace68da 100644 --- a/DysonNetwork.Shared/Cache/MessagePackCacheSerializer.cs +++ b/DysonNetwork.Shared/Cache/MessagePackCacheSerializer.cs @@ -1,12 +1,15 @@ using MessagePack; +using MessagePack.Resolvers; namespace DysonNetwork.Shared.Cache; public class MessagePackCacheSerializer(MessagePackSerializerOptions? options = null) : ICacheSerializer { private readonly MessagePackSerializerOptions _options = options ?? MessagePackSerializerOptions.Standard - .WithResolver(MessagePack.Resolvers.ContractlessStandardResolver.Instance) - .WithCompression(MessagePackCompression.Lz4BlockArray); + .WithResolver(ContractlessStandardResolver.Instance) + .WithCompression(MessagePackCompression.Lz4BlockArray) + .WithSecurity(MessagePackSecurity.UntrustedData) + .WithOmitAssemblyVersion(true); public string Serialize(T value) { diff --git a/DysonNetwork.Shared/Extensions.cs b/DysonNetwork.Shared/Extensions.cs index 656e924..d4252ab 100644 --- a/DysonNetwork.Shared/Extensions.cs +++ b/DysonNetwork.Shared/Extensions.cs @@ -70,8 +70,7 @@ public static class Extensions return RedLockFactory.Create(new List { new(mux) }); }); builder.Services.AddSingleton(); - // Using message pack for now - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); return builder; }