JSON.NET рдореЗрдВ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
рдХреНрдпрд╛ System.Text.Json
рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реИ?
рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╕рд╛рде рд╣реА, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрдпрд╛ рд╣реИ ( Local
, Utc
, Unspecified
)?
cc @layomia рддрд╛рд░реАрдЦреЛрдВ рдкрд░
рдЪреВрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрдЯрд╛рдЗрдо рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЬрд╝реЛрди рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛), рдкрд╛рдардХ рд▓реЗрдЦрдХ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ) рдЬреЛ рдЙрдкрд▓рдмреНрдз рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдПрд╕рдУ 8601 рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
@btecu рдЖрдИрдПрд╕рдУ 8601 рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 2019-07-26T16:59:57-05:00ред
deserializing рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рдСрдлрд╝рд╕реЗрдЯ "hh:mm" рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ DateTimeKind.Local
рд╕рд╛рде рдПрдХ рдбреЗрдЯрдЯрд╛рдЗрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "Z" DateTimeKind.Utc
ред рдпрджрд┐ рдХреЛрдИ рдСрдлрд╝рд╕реЗрдЯ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ DateTimeKind.Unspecified
рд╕рд╛рде рдбреЗрдЯрдЯрд╛рдЗрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░рд┐рд╡рд░реНрд╕ рдореИрдкрд┐рдВрдЧ рдХреНрд░рдорд╛рдВрдХрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ: DateTime
рдХреЛ DateTimeKind.Local
рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рд╕реЗ "hh:mm" -рдлреЙрд░реНрдореЗрдЯреЗрдб рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ ISO рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
System.Text.Json рдореЗрдВ рдбреЗрдЯрдЯрд╛рдЗрдо рдФрд░ рдбреЗрдЯрдЯрд╛рдЗрдо рдСрдлрд╕реЗрдЯ рд╕рдорд░реНрдерди рдФрд░ рдЖрдк рдХрд╕реНрдЯрдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдпрд╛ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json -рд╕рд╣рдпреЛрдЧред
@btecu рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, System.Text.Json
рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд░рдЦрдирд╛ рд╣реИ:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
рдФрд░ рдЙрд╕ рддрд░рд╣ рдбреЗрдЯрдЯрд╛рдЗрдо рдХрдирд╡рд░реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
public class DateTimeConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
}
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@btecu рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ,
System.Text.Json
рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд░рдЦрдирд╛ рд╣реИ:рдФрд░ рдЙрд╕ рддрд░рд╣ рдбреЗрдЯрдЯрд╛рдЗрдо рдХрдирд╡рд░реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ