<PackageReference Include="System.Text.Json" Version="9.0.5" />

JsonValueCustomized<TValue>

sealed class JsonValueCustomized<TValue> : JsonValue<TValue>
using System.Text.Json.Serialization.Metadata; namespace System.Text.Json.Nodes { internal sealed class JsonValueCustomized<TValue> : JsonValue<TValue> { private readonly JsonTypeInfo<TValue> _jsonTypeInfo; private JsonValueKind? _valueKind; public JsonValueCustomized(TValue value, JsonTypeInfo<TValue> jsonTypeInfo, JsonNodeOptions? options = default(JsonNodeOptions?)) : base(value, options) { _jsonTypeInfo = jsonTypeInfo; } private protected override JsonValueKind GetValueKindCore() { JsonValueKind valueOrDefault = _valueKind.GetValueOrDefault(); if (!_valueKind.HasValue) { valueOrDefault = ComputeValueKind(); _valueKind = valueOrDefault; return valueOrDefault; } return valueOrDefault; } internal override JsonNode DeepCloneCore() { return JsonSerializer.SerializeToNode<TValue>(Value, _jsonTypeInfo); } public override void WriteTo(Utf8JsonWriter writer, JsonSerializerOptions options = null) { if (writer == null) ThrowHelper.ThrowArgumentNullException("writer"); JsonTypeInfo<TValue> jsonTypeInfo = _jsonTypeInfo; if (options != null && options != jsonTypeInfo.Options) { options.MakeReadOnly(); jsonTypeInfo = (JsonTypeInfo<TValue>)options.GetTypeInfoInternal(typeof(TValue), true, true, false, false); } jsonTypeInfo.Serialize(writer, ref Value, null); } private JsonValueKind ComputeValueKind() { PooledByteBufferWriter bufferWriter; Utf8JsonWriter utf8JsonWriter = Utf8JsonWriterCache.RentWriterAndBuffer(default(JsonWriterOptions), 16384, out bufferWriter); try { WriteTo(utf8JsonWriter, null); utf8JsonWriter.Flush(); Utf8JsonReader utf8JsonReader = new Utf8JsonReader(bufferWriter.WrittenMemory.Span, default(JsonReaderOptions)); utf8JsonReader.Read(); return utf8JsonReader.TokenType.ToValueKind(); } finally { Utf8JsonWriterCache.ReturnWriterAndBuffer(utf8JsonWriter, bufferWriter); } } } }