我们试图强制我们的c#中的datetime对象使用不同于默认格式的格式进行序列化。我们不想包含毫秒。 SortableDateTimePattern和UniversalSortableDateTimePattern是只读的。如何更改.NET中的DateTime通用排序格式?
2
A
回答
1
假设你在谈论服务器发送的DataContract中的DateTime实例,我不认为有一种简单的方法可以做到这一点。您提到的模式不被使用(如果是的话,您可以通过反射来破解共享模式实例,以获得一个非常简单的解决方案)。 DataContractSerializer最终将任务委托给内部的XsdDateTime.ToString()方法,该方法经过硬编码,如果它们非零,则始终发出小数秒。
这并不优雅,但利用硬编码行为可能是最简单的解决方案:只需复制所有日期时间,在离开服务器之前将毫秒重置为零。
另外,您还需要在受影响的操作上连接自定义IDispatchMessageFormatter或IDispatchMessageInspector。如果你想让它们变得通用并且容易连接起来,那么在公园里散步也不是。
只是好奇 - 你有一个行为不端的客户,不明白小数秒吗?
0
我想出了一些办法来解决这个问题。更复杂的方法涉及到自定义MessageFormatter端点的挂钩。
我们找到了一个简单的方法来解决这个问题。
秒的分数只有在日期时间对象具有它们时才会生成。
我们做了什么:
我们创建了一个使用反射来检测日期时间数据类型PropertyChange事件处理程序的静态。当发现我们重新创建日期时间没有秒的分数。在我们的案例中,我们根本不在乎秒。我们通过部分类构造函数将事件连接起来。而已。
当然
public static class DateTimeSecondCatcher
{
PropertyInfo dateTimePropertyInfo = sender.GetType().GetProperty(e.PropertyName);
if ((dateTimePropertyInfo != null) && (dateTimePropertyInfo.PropertyType == typeof(DateTime)))
{
DateTime dteValue = (DateTime)dateTimePropertyInfo.GetValue(sender, null);
if (dteValue.Millisecond > 0)
{
dateTimePropertyInfo.SetValue(sender, new DateTime(dteValue.Year,dteValue.Month,dteValue.Day, dteValue.Hour,dteValue.Minute,dteValue.Second,0,dteValue.Kind), null);
}
}
}
// This code goes in the partial class constructor
this.PropertyChanged += new PropertyChangedEventHandler(DateTimeSecondCatcher.OnPropertyChanged);
相关问题
- 1. 如何更改DateTime/GetLastWriteTime的格式?
- 2. 如何更改SQLite时间格式datetime
- 3. DateTime格式文化 - 如何更改它?
- 4. datetime已更改格式mvc
- 5. 我如何使用.NET中的IComparer更改排序顺序
- 6. 如何更改格式的DateTime列的DataTable中从C#
- 7. 如何更改DateTime显示格式以使用我的功能?
- 8. 如何更改RDLC中DateTime的时间格式?
- 9. jqgrid datetime 24小时排序格式
- 10. 相邻DateTime格式在.NET
- 11. 如何更改devexpress网格排序行的方式
- 12. 如何更改DateTime?
- 13. 将DateTime格式更改为dd/mmmm/yyyy
- 14. C#DateTime更改为另一种格式
- 15. 如何通过用户事件更改SAPUI5中列表的排序或排序?
- 16. 如何更改.net中datetime选取器的弹出大小?
- 17. 如何使用Gson在Android中反序列化.NET JsonResult DateTime格式?
- 18. 使用datetime更改python中的时间格式
- 19. 如何通过更改日期格式
- 20. 如何更改.net RDLC报表中的日期格式?
- 21. 如何在SQL Server中使用datetime DateType更改日期的格式?
- 22. 如何返回DateTime而不更改格式
- 23. 如何通过在Angularjs中降序datetime ng-repeat来排序?
- 24. 如何更改光标中的排序
- 25. 如何在DateTime :: Locale中使用DateTime对象的格式?
- 26. 如何更改mysql中表格的排序规则?
- 27. 如何更改序列化程序中的DateTime模型字段表示形式?
- 28. 更改DataRow元素中的Datetime对象的格式
- 29. 如何更改DateTime中的时间?
- 30. 如何更改Ruby中DateTime的时区?