From fdd43ef0ffac6e22cf6c7bbd1bc476fcacee3438 Mon Sep 17 00:00:00 2001 From: Adam Barclay Date: Thu, 22 Mar 2018 15:02:11 +0000 Subject: [PATCH] Change StripeDateTimeConverter to write epoch not MS /Date(.)/ format --- .../datetime_json_converter.cs | 48 +++++++++++++++++++ .../JsonConverters/StripeDateTimeConverter.cs | 5 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/Stripe.Tests.XUnit/_infrastructure/datetime_json_converter.cs diff --git a/src/Stripe.Tests.XUnit/_infrastructure/datetime_json_converter.cs b/src/Stripe.Tests.XUnit/_infrastructure/datetime_json_converter.cs new file mode 100644 index 0000000000..aa1150bb2e --- /dev/null +++ b/src/Stripe.Tests.XUnit/_infrastructure/datetime_json_converter.cs @@ -0,0 +1,48 @@ +using System; +using FluentAssertions; +using Newtonsoft.Json; +using Stripe.Infrastructure; +using Xunit; + +namespace Stripe.Tests.Xunit +{ + public class datetime_json_converter + { + [Fact] + public void should_roundtrip_datetimes() + { + var obj = new TestObject + { + Date = RoundedDate() + }; + + var reloaded = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj)); + reloaded.Date.Should().Be(obj.Date); + } + + [Fact] + public void should_handle_null() + { + var obj = new TestObject + { + Date = null + }; + + var reloaded = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj)); + reloaded.Date.Should().BeNull(); + } + + private static DateTime RoundedDate() + { + var date = DateTime.UtcNow; + + return date.AddTicks( -1 * (date.Ticks % TimeSpan.TicksPerSecond)); + } + + public class TestObject + { + [JsonConverter(typeof(StripeDateTimeConverter))] + public DateTime? Date { get; set; } + } + } +} \ No newline at end of file diff --git a/src/Stripe.net/Infrastructure/JsonConverters/StripeDateTimeConverter.cs b/src/Stripe.net/Infrastructure/JsonConverters/StripeDateTimeConverter.cs index 1f1e009563..364a4d1cb4 100644 --- a/src/Stripe.net/Infrastructure/JsonConverters/StripeDateTimeConverter.cs +++ b/src/Stripe.net/Infrastructure/JsonConverters/StripeDateTimeConverter.cs @@ -8,7 +8,10 @@ internal class StripeDateTimeConverter : DateTimeConverterBase { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - writer.WriteRawValue(@"""\/Date(" + EpochTime.ConvertDateTimeToEpoch((DateTime)value).ToString() + @")\/"""); + if (value == null) + writer.WriteNull(); + else + writer.WriteRawValue(((DateTime)value).ConvertDateTimeToEpoch().ToString()); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)