Ошибка, когда DeserializeObject to Datetime

Я пытаюсь преобразовать строку JSON в DateTime, получая дату из заголовков и обнаруживая ошибку.

Мой код:

if (actionContext.Request.Headers.Contains("DataSync"))
{
    var date = actionContext.Request.Headers.GetValues("DataSync").First();
    userRequest.LastSync =
        JsonConvert.DeserializeObject<DateTime>(date,new IsoDateTimeConverter());
}

Ошибка:

"Message": "An error has occurred.",
"ExceptionMessage": "Error reading date. Unexpected token: Integer. Path '', line 1, position 2.",
"ExceptionType": "Newtonsoft.Json.JsonReaderException",
"StackTrace": " em Newtonsoft.Json.JsonReader.ReadAsDateTimeInternal()\ \ em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)\ \ em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)\ \ em Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)\ \ em Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)\ \ em Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)\ \ em Portal.Infraestructure.Filters.UserRequestFilter.OnActionExecuting(HttpActionContext actionContext) na d:\\Projetos\\api\\Portal\\Infraestructure\\Filters\\UserRequestFilter.cs:linha 28\ \ em System.Web.Http.Filters.ActionFilterAttribute.OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)\ \ --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---\ \ em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\ \ em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ \ em System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\ \ --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---\ \ em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\ \ em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ \ em System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\ \ em System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\ \ --- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---\ \ em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\ \ em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ \ em System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\ \ em System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()

Я использую почтальон для тестирования. Я звоню своему контролеру и передаю дату в заголовках почтальона.Что я могу сделать для исправления этой ошибки?

2 ответа

Решение

Решение:

использование DateTime.Parse()

Может быть, использование формата даты и времени поможет.

var format = "dd/MM/yyyy"; 
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };

var ld = JsonConvert.DeserializeObject<DateTime>(json,      dateTimeConverter);
Другие вопросы по тегам