[IMPLEMENTED] Squidex.ClientLibrary: Json serializes dates to incorrect format


#1

It seems a bug in the ClientLibrary. It’s not possible to save an object with a DateTime field because of incorrect serialized DateTime format.

Example of serialized DateTime: “2019-06-30T00:00:00”. And it’s not ISO8601

A workaround is to create and use separate DateTimeConverter for DateTime fields instead of InvariantConverter with correct DateTimeFormat.


#2

Thx, will be fixed today.


#3

Do you have a small example?


#4

F.E. changes to InvariantConverter

 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                if (value is DateTime)
                {
                    var converter = new IsoDateTimeConverter
                    {
                        DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
                    };
                    serializer.Converters.Add(converter);
                }

        writer.WriteStartObject();
        writer.WritePropertyName("iv");
        serializer.Serialize(writer, value);
        writer.WriteEndObject();
    }

#5

This should be the default:

IsoDateTimeConverter
Note Note
From Json.NET 4.5 and onwards dates are written using the ISO 8601 format by default, and using this converter is unnecessary.

IsoDateTimeConverter serializes a DateTime to an ISO 8601 formatted string: “2009-02-15T00:00:00Z”

The IsoDateTimeConverter class has a property, DateTimeFormat, to further customize the formatted string.


#6

The reason is that your datetime is actually not UTC. It is actually not a bug but I can improve it.


#7

I have added the functionality to convert datetime to utc automatically: https://github.com/Squidex/squidex-samples/commit/fd1bd57a637d16cc894b4eba9d1cb6d3d23be4fc

3.1. of the library is on its way and already pushed to nuget.


#8

Thanks. now it works as it should


#9