public override void Write( Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) { Argument.AssertNotNull(writer, nameof(writer)); Debug.Assert(options != null); writer.WriteStringValue(JsonSerialization.Date(value, CultureInfo.InvariantCulture)); }
/// <summary> /// Create an OData filter expression from an interpolated string. The /// interpolated values will be quoted and escaped as necessary. /// </summary> /// <param name="filter">An interpolated filter string.</param> /// <param name="formatProvider"> /// Format provider used to convert values to strings. /// <see cref="CultureInfo.InvariantCulture"/> is used as a default. /// </param> /// <returns>A valid OData filter expression.</returns> public static string Create(FormattableString filter, IFormatProvider formatProvider) { if (filter == null) { return(null); } formatProvider ??= CultureInfo.InvariantCulture; string[] args = new string[filter.ArgumentCount]; for (int i = 0; i < filter.ArgumentCount; i++) { args[i] = filter.GetArgument(i) switch { // Null null => "null", // Boolean bool x => x.ToString(formatProvider).ToLowerInvariant(), // Numeric sbyte x => x.ToString(formatProvider), byte x => x.ToString(formatProvider), short x => x.ToString(formatProvider), ushort x => x.ToString(formatProvider), int x => x.ToString(formatProvider), uint x => x.ToString(formatProvider), long x => x.ToString(formatProvider), ulong x => x.ToString(formatProvider), decimal x => x.ToString(formatProvider), // Floating point float x => JsonSerialization.Float(x, formatProvider), double x => JsonSerialization.Double(x, formatProvider), // Dates as 8601 with a time zone DateTimeOffset x => JsonSerialization.Date(x, formatProvider), DateTime x => JsonSerialization.Date(x, formatProvider), #if EXPERIMENTAL_SPATIAL // Points GeometryPosition x => EncodeGeometry(x), PointGeometry x => EncodeGeometry(x), // Polygons LineGeometry x => EncodeGeometry(x), PolygonGeometry x => EncodeGeometry(x), #endif // Text string x => Quote(x), char x => Quote(x.ToString(formatProvider)), StringBuilder x => Quote(x.ToString()), // Everything else object x => throw new ArgumentException( $"Unable to convert argument {i} from type {x.GetType()} to an OData literal.") }; } string text = string.Format(formatProvider, filter.Format, args); return(text); }