<PackageReference Include="System.Text.Json" Version="10.0.0-preview.6.25358.103" />

JsonValueConverter

using System.Text.Json.Nodes; using System.Text.Json.Schema; namespace System.Text.Json.Serialization.Converters { internal sealed class JsonValueConverter : JsonConverter<JsonValue> { public override void Write(Utf8JsonWriter writer, JsonValue value, JsonSerializerOptions options) { if (value == null) writer.WriteNullValue(); else value.WriteTo(writer, options); } public override JsonValue Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) return null; JsonTokenType tokenType = reader.TokenType; if (tokenType - 7 <= JsonTokenType.StartArray) return ReadNonNullPrimitiveValue(ref reader, options.GetNodeOptions()); JsonElement element = JsonElement.ParseValue(ref reader, options.AllowDuplicateProperties); return JsonValue.CreateFromElement(ref element, options.GetNodeOptions()); } internal static JsonValue ReadNonNullPrimitiveValue(ref Utf8JsonReader reader, JsonNodeOptions options) { switch (reader.TokenType) { case JsonTokenType.String: return JsonValue.Create(reader.GetString(), options); case JsonTokenType.False: return JsonValue.Create(false, options); case JsonTokenType.True: return JsonValue.Create(true, options); case JsonTokenType.Number: { JsonElement element = JsonElement.ParseValue(ref reader); return JsonValue.CreateFromElement(ref element, options); } default: throw new JsonException(); } } internal override JsonSchema GetSchema(JsonNumberHandling _) { return JsonSchema.CreateTrueSchema(); } } }