diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs index a0bdacea08..4683a54b95 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using JsonApiDotNetCore.Models; @@ -26,12 +26,12 @@ public TodoItem() [Attr("achieved-date", isFilterable: false, isSortable: false)] public DateTime? AchievedDate { get; set; } - [Attr("updated-date")] public DateTime? UpdatedDate { get; set; } - - + [Attr("offset-date")] + public DateTimeOffset? OffsetDate { get; set; } + public int? OwnerId { get; set; } public int? AssigneeId { get; set; } public Guid? CollectionId { get; set; } diff --git a/src/JsonApiDotNetCore/Serialization/JsonApiDeSerializer.cs b/src/JsonApiDotNetCore/Serialization/JsonApiDeSerializer.cs index ac4b4f2438..4e3beaaf81 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonApiDeSerializer.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonApiDeSerializer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using JsonApiDotNetCore.Extensions; @@ -36,8 +37,12 @@ public object Deserialize(string requestBody) { try { - var bodyJToken = JToken.Parse(requestBody); - + JToken bodyJToken; + using (JsonReader jsonReader = new JsonTextReader(new StringReader(requestBody))) + { + jsonReader.DateParseHandling = DateParseHandling.None; + bodyJToken = JToken.Load(jsonReader); + } if (RequestIsOperation(bodyJToken)) { _jsonApiContext.IsBulkOperationRequest = true; diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs index 69bcccb2a2..d28a6bd918 100644 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs @@ -452,6 +452,7 @@ public async Task Can_Post_TodoItem() _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); + var nowOffset = new DateTimeOffset(); var content = new { data = new @@ -461,7 +462,8 @@ public async Task Can_Post_TodoItem() { { "description", todoItem.Description }, { "ordinal", todoItem.Ordinal }, - { "created-date", todoItem.CreatedDate } + { "created-date", todoItem.CreatedDate }, + { "offset-date", nowOffset } }, relationships = new { @@ -494,6 +496,7 @@ public async Task Can_Post_TodoItem() Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(todoItem.Description, deserializedBody.Description); Assert.Equal(todoItem.CreatedDate.ToString("G"), deserializedBody.CreatedDate.ToString("G")); + Assert.Equal(nowOffset.ToString("yyyy-MM-ddTHH:mm:ssK"), deserializedBody.OffsetDate?.ToString("yyyy-MM-ddTHH:mm:ssK")); Assert.Null(deserializedBody.AchievedDate); }