Невозможно десериализовать дату в массиве сложных объектов - PullRequest
0 голосов
/ 27 декабря 2018

На стороне MVC у меня есть такой класс:

public class ComplexOne
{
   public DateTime Date {get;set;}
   public int Value {get;set;}
}

И в действии контроллера

public virtual JsonResult TakeData(int id, ComplexOne[] data)  

Из JS я отправляю объект следующим образом:

{
id = 10,
data = [
        {Date:"2017-12-27", Value:10},
        {Date:"2017-12-27", Value:20},
        {Date:"2017-12-27", Value:30}
    ]
}

MVC понимает все, кроме даты, которая десериализуется как значение по умолчанию ({01.01.0001 0:00:00}).Я пробовал разные форматы даты - yyyy-MM-dd, dd-MM-yyyy, MM/dd/yyyy и даже ISO, но безуспешно.

Как сделать это правильно, не передавая дату в виде строкового и ручного анализа в MVC?

1 Ответ

0 голосов
/ 27 декабря 2018

Вы передаете Date как string в JSON объекте, но ваш Date в ComplexOne классе модели равен DateTime.

Таким образом, вы можете использовать DTO для полученияобъект JSON в действии контроллера, а затем преобразовать DTO в фактическую модель следующим образом:

public class ComplexOneDto
{
   public string Date {get;set;}
   public int Value {get;set;}
}

Действие контроллера:

public virtual JsonResult TakeData(int id, ComplexOneDto[] data)
{
    // here convert the ComplexOneDto[] to ComplexOne[] as follows

    List<ComplexOne> complexOnes = new List<ComplexOne>();
    foreach (ComplexOneDto complexOneDto in data)
    {
       DateTime convertedDateTime = DateTime.ParseExact(complexOneDto.Date, "yyyy-MM-dd", CultureInfo.InvariantCulture);

       complexOnes .Add(new ComplexOne() { Date = convertedDateTime, Value = complexOneDto.Value });
    }

    return Json(true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...