From b364edc74b15435d65591554608cd4c451a24979 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Tue, 2 Dec 2025 22:59:43 +0800 Subject: [PATCH] :rewind: Use Json Serializer in cache again --- .../Cache/JsonCacheSerializer.cs | 29 ++++++++++++++----- .../Cache/MessagePackCacheSerializer.cs | 7 +++-- DysonNetwork.Shared/Extensions.cs | 3 +- 3 files changed, 28 insertions(+), 11 deletions(-) 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; }