我們試圖強制我們的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的時區?