我们试图强制我们的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. 我如何使用.NET中的IComparer更改排序顺序
- 3. jqgrid datetime 24小时排序格式
- 4. 如何更改devexpress网格排序行的方式
- 5. 如何更改DateTime?
- 6. C#DateTime更改为另一种格式
- 7. 将DateTime格式更改为dd/mmmm/yyyy
- 8. 如何通过用户事件更改SAPUI5中列表的排序或排序?
- 9. 使用datetime更改python中的时间格式
- 10. 如何更改.net中datetime选取器的弹出大小?
- 11. 如何使用Gson在Android中反序列化.NET JsonResult DateTime格式?
- 12. 如何在SQL Server中使用datetime DateType更改日期的格式?
- 13. 如何返回DateTime而不更改格式
- 14. 如何通过在Angularjs中降序datetime ng-repeat来排序?
- 15. 如何更改光标中的排序
- 16. 如何更改Ruby中DateTime的时区?
- 17. 如何更改DateTime中的时间?
- 18. 在winform C中更改DATETIME属性的格式#
- 19. 更改对象中属性的DateTime格式?
- 20. Sharepoint 2013:如何在NewForm/EditForm中更改DateTime文本框的日期格式?
- 21. 如何更改.Net MVC中DateTime模型绑定器上的默认输入格式?
- 22. 如何用JavaScript更改URL的格式?
- 23. 将格式从mySQL datetime格式更改为ruby中的不同类型?
- 24. 如何更改格式1格式2
- 25. 如何通知WPF数据绑定中的DateTime更改事件?
- 26. 如何更改solr中的defaults.last_index_time格式
- 27. 如何更改Wordpress中的URL格式?
- 28. C#:更改格式日期中带前导零在DateTime中
- 29. DateTime格式在C#中没有改变
- 30. 在插件中更改“排序方式”