<PackageReference Include="System.Text.Json" Version="10.0.0-rc.1.25451.107" />

JsonNodeConverter

using System.Text.Json.Nodes; using System.Text.Json.Schema; namespace System.Text.Json.Serialization.Converters { internal sealed class JsonNodeConverter : JsonConverter<JsonNode> { internal static JsonNodeConverter Instance { get; } = new JsonNodeConverter(); public override void Write(Utf8JsonWriter writer, JsonNode value, JsonSerializerOptions options) { if (value == null) writer.WriteNullValue(); else value.WriteTo(writer, options); } public override JsonNode Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (!options.AllowDuplicateProperties) return ReadAsJsonNode(ref reader, options.GetNodeOptions()); return ReadAsJsonElement(ref reader, options.GetNodeOptions()); } internal static JsonNode ReadAsJsonElement(ref Utf8JsonReader reader, JsonNodeOptions options) { switch (reader.TokenType) { case JsonTokenType.String: case JsonTokenType.Number: case JsonTokenType.True: case JsonTokenType.False: return JsonValueConverter.ReadNonNullPrimitiveValue(ref reader, options); case JsonTokenType.StartObject: return JsonObjectConverter.ReadAsJsonElement(ref reader, options); case JsonTokenType.StartArray: return JsonArrayConverter.ReadAsJsonElement(ref reader, options); case JsonTokenType.Null: return null; default: throw new JsonException(); } } internal static JsonNode ReadAsJsonNode(ref Utf8JsonReader reader, JsonNodeOptions options) { switch (reader.TokenType) { case JsonTokenType.String: case JsonTokenType.Number: case JsonTokenType.True: case JsonTokenType.False: return JsonValueConverter.ReadNonNullPrimitiveValue(ref reader, options); case JsonTokenType.StartObject: return JsonObjectConverter.ReadAsJsonNode(ref reader, options); case JsonTokenType.StartArray: return JsonArrayConverter.ReadAsJsonNode(ref reader, options); case JsonTokenType.Null: return null; default: throw new JsonException(); } } public static JsonNode Create(JsonElement element, JsonNodeOptions? options) { switch (element.ValueKind) { case JsonValueKind.Null: return null; case JsonValueKind.Object: return new JsonObject(element, options); case JsonValueKind.Array: return new JsonArray(element, options); default: return new JsonValueOfElement(element, options); } } internal override JsonSchema GetSchema(JsonNumberHandling _) { return JsonSchema.CreateTrueSchema(); } } }