在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中手动解析?
答案 0 :(得分:0)
您正在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);
}