Browse Source

Add JsonDateTimeConverter

crobibero 4 years ago
parent
commit
242b5a45ab

+ 34 - 0
MediaBrowser.Common/Json/Converters/JsonDateTimeConverter.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Globalization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace MediaBrowser.Common.Json.Converters
+{
+    /// <summary>
+    /// Legacy DateTime converter.
+    /// Milliseconds aren't output if zero by default.
+    /// </summary>
+    public class JsonDateTimeConverter : JsonConverter<DateTime>
+    {
+        /// <inheritdoc />
+        public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            return reader.GetDateTime();
+        }
+
+        /// <inheritdoc />
+        public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
+        {
+            if (value.Ticks % 10_000_000 == 0)
+            {
+                // Remaining ticks value will be 0, manually format.
+                writer.WriteStringValue(value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffZ", CultureInfo.InvariantCulture));
+            }
+            else
+            {
+                writer.WriteStringValue(value);
+            }
+        }
+    }
+}

+ 1 - 0
MediaBrowser.Common/Json/JsonDefaults.cs

@@ -44,6 +44,7 @@ namespace MediaBrowser.Common.Json
             options.Converters.Add(new JsonStringEnumConverter());
             options.Converters.Add(new JsonNullableStructConverterFactory());
             options.Converters.Add(new JsonBoolNumberConverter());
+            options.Converters.Add(new JsonDateTimeConverter());
 
             return options;
         }