无法反序列化复杂对象数组中的日期

时间:2018-12-27 10:15:05

标签: json ajax datetime

在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-dddd-MM-yyyyMM/dd/yyyy,甚至ISO格式,但都没有运气。

如何以正确的方式执行此操作而不将日期作为字符串传递和在MVC中手动解析?

1 个答案:

答案 0 :(得分:0)

您正在Date对象中以string的形式传递JSON,但是在Date模型类中的ComplexOneDateTime

因此,您可以使用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);
}
相关问题