Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -666,28 +666,7 @@ internal bool TryGetValue(int index, out DateTime value)
ReadOnlySpan<byte> data = _utf8Json.Span;
ReadOnlySpan<byte> segment = data.Slice(row.Location, row.SizeOrLength);

if (!JsonHelpers.IsValidDateTimeOffsetParseLength(segment.Length))
{
value = default;
return false;
}

// Segment needs to be unescaped
if (row.HasComplexChildren)
{
return JsonReaderHelper.TryGetEscapedDateTime(segment, out value);
}

Debug.Assert(segment.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(segment, out DateTime tmp))
{
value = tmp;
return true;
}

value = default;
return false;
return JsonReaderHelper.TryGetValue(segment, row.HasComplexChildren, out value);
}

internal bool TryGetValue(int index, out DateTimeOffset value)
Expand All @@ -701,28 +680,7 @@ internal bool TryGetValue(int index, out DateTimeOffset value)
ReadOnlySpan<byte> data = _utf8Json.Span;
ReadOnlySpan<byte> segment = data.Slice(row.Location, row.SizeOrLength);

if (!JsonHelpers.IsValidDateTimeOffsetParseLength(segment.Length))
{
value = default;
return false;
}

// Segment needs to be unescaped
if (row.HasComplexChildren)
{
return JsonReaderHelper.TryGetEscapedDateTimeOffset(segment, out value);
}

Debug.Assert(segment.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(segment, out DateTimeOffset tmp))
{
value = tmp;
return true;
}

value = default;
return false;
return JsonReaderHelper.TryGetValue(segment, row.HasComplexChildren, out value);
}

internal bool TryGetValue(int index, out Guid value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,32 @@ public static bool IsTokenTypePrimitive(JsonTokenType tokenType) =>
// Otherwise, return false.
public static bool IsHexDigit(byte nextByte) => HexConverter.IsHexChar(nextByte);

public static bool TryGetValue(ReadOnlySpan<byte> segment, bool isEscaped, out DateTime value)
{
if (!JsonHelpers.IsValidDateTimeOffsetParseLength(segment.Length))
{
value = default;
return false;
}

// Segment needs to be unescaped
if (isEscaped)
{
return TryGetEscapedDateTime(segment, out value);
}

Debug.Assert(segment.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(segment, out DateTime tmp))
{
value = tmp;
return true;
}

value = default;
return false;
}

public static bool TryGetEscapedDateTime(ReadOnlySpan<byte> source, out DateTime value)
{
Debug.Assert(source.Length <= JsonConstants.MaximumEscapedDateTimeOffsetParseLength);
Expand All @@ -101,6 +127,32 @@ public static bool TryGetEscapedDateTime(ReadOnlySpan<byte> source, out DateTime
return false;
}

public static bool TryGetValue(ReadOnlySpan<byte> segment, bool isEscaped, out DateTimeOffset value)
{
if (!JsonHelpers.IsValidDateTimeOffsetParseLength(segment.Length))
{
value = default;
return false;
}

// Segment needs to be unescaped
if (isEscaped)
{
return TryGetEscapedDateTimeOffset(segment, out value);
}

Debug.Assert(segment.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(segment, out DateTimeOffset tmp))
{
value = tmp;
return true;
}

value = default;
return false;
}

public static bool TryGetEscapedDateTimeOffset(ReadOnlySpan<byte> source, out DateTimeOffset value)
{
Debug.Assert(source.Length <= JsonConstants.MaximumEscapedDateTimeOffsetParseLength);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1260,30 +1260,10 @@ internal bool TryGetDateTimeCore(out DateTime value)
}
else
{
if (!JsonHelpers.IsInRangeInclusive(ValueSpan.Length, JsonConstants.MinimumDateTimeParseLength, JsonConstants.MaximumEscapedDateTimeOffsetParseLength))
{
value = default;
return false;
}

span = ValueSpan;
}

if (ValueIsEscaped)
{
return JsonReaderHelper.TryGetEscapedDateTime(span, out value);
}

Debug.Assert(span.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(span, out DateTime tmp))
{
value = tmp;
return true;
}

value = default;
return false;
return JsonReaderHelper.TryGetValue(span, ValueIsEscaped, out value);
}

/// <summary>
Expand Down Expand Up @@ -1325,30 +1305,10 @@ internal bool TryGetDateTimeOffsetCore(out DateTimeOffset value)
}
else
{
if (!JsonHelpers.IsInRangeInclusive(ValueSpan.Length, JsonConstants.MinimumDateTimeParseLength, JsonConstants.MaximumEscapedDateTimeOffsetParseLength))
{
value = default;
return false;
}

span = ValueSpan;
}

if (ValueIsEscaped)
{
return JsonReaderHelper.TryGetEscapedDateTimeOffset(span, out value);
}

Debug.Assert(span.IndexOf(JsonConstants.BackSlash) == -1);

if (JsonHelpers.TryParseAsISO(span, out DateTimeOffset tmp))
{
value = tmp;
return true;
}

value = default;
return false;
return JsonReaderHelper.TryGetValue(span, ValueIsEscaped, out value);
}

/// <summary>
Expand Down
Loading