ServiceStack日期时间处理

我遇到了ServiceStack正在使用的DateTime格式的问题.

例如,我有一个像这样的简单请求对象.

public class GetAllUpdatedStudents : IReturn<GetAllUpdatedStudentsResponse>
{
    public DateTime LastUpdate { get; set; }
}

当提交12/10/2016的DateTime(mm / dd / yyyy)时,ServiceStack会将其转换为(dd / mm / yyyy)的DateTime格式,因此系统认为它是10月12日而不是12月10日.

在将DateTime属性绑定到请求对象时,如何告诉ServiceStack不执行此操作并使用mm / dd / yyyy的格式?

最佳答案 通过线路发送DateTime的最合适和最不模糊的方法是始终使用
ISO 8601 Date Format.ServiceStack支持多种日期格式,具有多种IS0 8601变体,但ServiceStack中没有配置支持日期前一个月的格式,如mm / dd / yyyy被解释为dd / mm / yyyy.但为了避免任何歧义,理想情况下你应该发送YYYY-MM-DD格式.

如果您需要接受MM / DD / YYYY,您可以将其更改为字符串,例如:

public class GetAllUpdatedStudents : IReturn<GetAllUpdatedStudentsResponse>
{
    public string LastUpdate { get; set; }
}

然后使用服务实现中的首选DateTime格式解析它.

您可以覆盖内置的DateTime序列化,以便在特定的日期格式中解析它,例如:

JsConfig.DeSerializeFn = str => {
    return DateTime.ParseExact(str,"MM/dd/yyyy",null);
};

但我建议不要这样做,因为您的服务不会具有互操作性.

点赞