using System; using System.Text.Json.Serialization; using System.Text.Json; using System.Diagnostics.CodeAnalysis; namespace CryptoExchange.Net.Converters.SystemTextJson { /// /// Converter for values which contain a nested json value /// public class ObjectStringConverter : JsonConverter { /// #if NET5_0_OR_GREATER [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL3050:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")] [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")] #endif public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) return default; var value = reader.GetString(); if (string.IsNullOrEmpty(value)) return default; return (T?)JsonDocument.Parse(value!).Deserialize(typeof(T), options); } /// #if NET5_0_OR_GREATER [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL3050:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")] [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")] #endif public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options) { if (value is null) writer.WriteStringValue(""); writer.WriteStringValue(JsonSerializer.Serialize(value, options)); } } }