csharp.libraries.generichost.DateOnlyJsonConverter.mustache Maven / Gradle / Ivy
{{>partial_header}}
using System;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace {{packageName}}.{{clientPackage}}
{
///
/// Formatter for 'date' openapi formats ss defined by full-date - RFC3339
/// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
///
{{>visibility}} class DateOnlyJsonConverter : JsonConverter
{
///
/// The formats used to deserialize the date
///
public static string[] Formats { get; } = {
{{>DateFormats}}
};
///
/// Returns a DateOnly from the Json object
///
///
///
///
///
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
if (reader.TokenType == JsonTokenType.Null)
throw new NotSupportedException();
string value = reader.GetString(){{nrt!}};
foreach(string format in Formats)
if (DateOnly.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateOnly result))
return result;
throw new NotSupportedException();
}
///
/// Writes the DateOnly to the json writer
///
///
///
///
public override void Write(Utf8JsonWriter writer, DateOnly dateOnlyValue, JsonSerializerOptions options) =>
writer.WriteStringValue(dateOnlyValue.ToString("{{{dateFormat}}}", CultureInfo.InvariantCulture));
}
}