// Fallback: manual strict parsing ReadOnlySpan<byte> span = reader.ValueSpan; Span<char> chars = stackalloc char[span.Length]; int len = Encoding.UTF8.GetChars(span, chars); if (DateTimeOffset.TryParseExact(chars.Slice(0, len), "yyyy-MM-dd'T'HH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out dto)) return dto;
throw new JsonException("Invalid RFC 3339 format");
public DateTimeOffset Timestamp get; set;
throw new JsonException($"Invalid RFC 3339 DateTimeOffset format: dateString");
if (reader.TokenType != JsonTokenType.String) throw new JsonException("Expected string token for DateTimeOffset");
⚠️ Stackalloc only safe for reasonably short strings (RFC 3339 ~30 chars). Perfectly safe here. RFC 3339 examples:
if (reader.TokenType == JsonTokenType.PropertyName && reader.GetString() == "created")
DateTimeOffset.TryParse is forgiving. For strict RFC 3339 compliance, use DateTimeOffset.TryParseExact :
Datetimeoffset Parsing Rfc 3339 [repack] | Utf8jsonreader
// Fallback: manual strict parsing ReadOnlySpan<byte> span = reader.ValueSpan; Span<char> chars = stackalloc char[span.Length]; int len = Encoding.UTF8.GetChars(span, chars); if (DateTimeOffset.TryParseExact(chars.Slice(0, len), "yyyy-MM-dd'T'HH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out dto)) return dto;
throw new JsonException("Invalid RFC 3339 format");
public DateTimeOffset Timestamp get; set; utf8jsonreader datetimeoffset parsing rfc 3339
throw new JsonException($"Invalid RFC 3339 DateTimeOffset format: dateString");
if (reader.TokenType != JsonTokenType.String) throw new JsonException("Expected string token for DateTimeOffset"); // Fallback: manual strict parsing ReadOnlySpan<
⚠️ Stackalloc only safe for reasonably short strings (RFC 3339 ~30 chars). Perfectly safe here. RFC 3339 examples:
if (reader.TokenType == JsonTokenType.PropertyName && reader.GetString() == "created") span = reader.ValueSpan
DateTimeOffset.TryParse is forgiving. For strict RFC 3339 compliance, use DateTimeOffset.TryParseExact :