Utf8jsonreader Datetimeoffset Parsing Rfc 3339 |work| ★
DateTimeOffset parsed = ParseDateTimeOffsetFromReader(ref reader); DateTimeOffset utc = parsed.ToUniversalTime(); | Error | Cause | |------------------------------------|-----------------------------------------------------------------------| | JsonException: Expected string | Token is not a string (maybe null or number). | | FormatException on TryParse | Missing T , wrong offset format ( +0530 instead of +05:30 ), wrong fractional seconds. | | Z not recognized | Some old parsers need ToUniversalTime() – not with DateTimeOffset . |
DateTimeOffset preserves offset.
using System; using System.Text.Json; using System.Text.Json.Serialization; // for JsonException public static DateTimeOffset ParseDateTimeOffsetFromReader(ref Utf8JsonReader reader) utf8jsonreader datetimeoffset parsing rfc 3339
if (DateTimeOffset.TryParse(dateStr, CultureInfo.InvariantCulture, out var dto)) return dto; | DateTimeOffset preserves offset
if (reader.TokenType != JsonTokenType.String) throw new JsonException("Expected string token"); string s = reader.GetString(); const string rfc3339Pattern = "yyyy-MM-dd'T'HH:mm:ss.FFFFFFFK"; | DateTimeOffset preserves offset. using System
public static DateTimeOffset GetDateTimeOffsetRfc3339(ref this Utf8JsonReader reader) if (reader.TokenType != JsonTokenType.String) throw new JsonException($"Expected string, got reader.TokenType"); // Fast path: use built-in conversion if possible (avoids custom parse) if (reader.TryGetDateTimeOffset(out DateTimeOffset dto)) return dto;
if (reader.TokenType != JsonTokenType.String) throw new JsonException("Expected string token for DateTimeOffset");