Utf8jsonreader Datetimeoffset Parsing Rfc 3339 May 2026

if (DateTimeOffset.TryParseExact(s, rfc3339Pattern, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out DateTimeOffset result))

| Scenario | Recommended Approach | |----------------------------------------|--------------------------------------------------------------------------------------| | Full object deserialization | Use JsonSerializer.Deserialize<T> | | Manual token parsing, performance OK | reader.GetString() + DateTimeOffset.TryParse | | Strict RFC 3339, low alloc | reader.ValueSpan + TryParseExact + stackalloc | | High-throughput streaming JSON | Use Utf8JsonReader + span-based parsing without intermediate string | utf8jsonreader datetimeoffset parsing rfc 3339

✅ Works because the built-in DateTimeOffsetConverter handles RFC 3339. When reading token-by-token and encountering a JsonTokenType.String that contains an RFC 3339 date: if (DateTimeOffset

if (reader.TokenType != JsonTokenType.String) throw new JsonException("Expected string token for DateTimeOffset"); | | Manual token parsing

ReadOnlySpan<byte> utf8Span = reader.ValueSpan; Span<char> buffer = stackalloc char[utf8Span.Length]; int chars = Encoding.UTF8.GetChars(utf8Span, buffer); ReadOnlySpan<char> dateStr = buffer.Slice(0, chars);