Bugfix/#1 parsing failes due to price ifnromation scheme changes #2

Merged
Serraniel merged 3 commits from bugfix/#1-parsing-failes-due-to-price-ifnromation-scheme-changes into main 2023-03-24 18:12:40 +01:00
2 changed files with 48 additions and 0 deletions
Showing only changes of commit a1f10da3d9 - Show all commits

View file

@ -1,5 +1,6 @@
using System; using System;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using JpnCardsPokemon.Sdk.Utils.JsonConverter;
namespace JpnCardsPokemon.Sdk.Api; namespace JpnCardsPokemon.Sdk.Api;
@ -38,6 +39,7 @@ public class CardPrice
/// Date when the price information was updated last. /// Date when the price information was updated last.
/// </summary> /// </summary>
[JsonPropertyName("dateUpdated")] [JsonPropertyName("dateUpdated")]
[JsonConverter(typeof(CustomDateTimeConverter))]
public DateTime? UpdatedDate { get; set; } public DateTime? UpdatedDate { get; set; }
/// <summary> /// <summary>

View file

@ -0,0 +1,46 @@
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace JpnCardsPokemon.Sdk.Utils.JsonConverter
{
internal class CustomDateTimeConverter : JsonConverter<DateTime?>
{
private readonly string _dateTimeFormat = "MM/dd/yyyy";
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case JsonTokenType.Null:
return null;
case JsonTokenType.String:
{
var dateString = reader.GetString();
if (DateTime.TryParseExact(dateString, _dateTimeFormat, null, System.Globalization.DateTimeStyles.None, out var dateTime))
{
return dateTime;
}
break;
}
default:
throw new JsonException($"Cannot convert {reader.GetString()} to DateTime.");
}
throw new JsonException($"Cannot convert {reader.GetString()} to DateTime.");
}
public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
{
if (value.HasValue)
{
writer.WriteStringValue(value.Value.ToString(_dateTimeFormat));
}
else
{
writer.WriteNullValue();
}
}
}
}