我遇到了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);
};
但我建议不要这样做,因为您的服务不会具有互操作性.