From aa89ba9f2044faca3a7c8f6e5dd74ff11100b076 Mon Sep 17 00:00:00 2001 From: Milos Date: Thu, 16 May 2019 15:53:31 +0200 Subject: [PATCH] DatetimeOffset input - fix automatic modification to local time --- src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs | 8 ++++---- .../Serialization/JsonApiDeSerializer.cs | 9 +++++++-- .../Acceptance/TodoItemsControllerTests.cs | 5 ++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs index 7ae957f4a5..a7d6e0edce 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs @@ -1,4 +1,4 @@ -using System; +using System; using JsonApiDotNetCore.Models; namespace JsonApiDotNetCoreExample.Models @@ -25,12 +25,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 9c46c22500..cbaebf7ef5 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 618db7dd10..6344ba0832 100644 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/TodoItemsControllerTests.cs @@ -404,6 +404,7 @@ public async Task Can_Post_TodoItem() _context.SaveChanges(); var todoItem = _todoItemFaker.Generate(); + var nowOffset = new DateTimeOffset(); var content = new { data = new @@ -413,7 +414,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 { @@ -446,6 +448,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); }