우리는 C#의 datetime 객체를 기본값과 다른 형식을 사용하여 직렬화하려고합니다. 우리는 밀리 초를 포함하고 싶지 않습니다. SortableDateTimePattern 및 UniversalSortableDateTimePattern은 읽기 전용입니다..NET에서 DateTime Universal Sort Format을 변경하는 방법은 무엇입니까?
2
A
답변
1
서버에서 보낸 DataContract의 DateTime 인스턴스에 대해 이야기한다고 가정하면이 작업을 수행하는 간단한 방법은 없다고 생각합니다. 당신이 언급 한 패턴은 사용되지 않습니다 (그렇다면 총체적이지만 쉬운 해결책을 위해 리플렉션을 통해 공유 패턴 인스턴스를 해킹 할 수 있습니다). DataContractSerializer는 궁극적으로 작업을 내부 XsdDateTime.ToString() 메서드에 위임합니다.이 메서드는 0이 아닌 경우 소수 자릿수 초를 항상 방출하도록 하드 코드됩니다.
우아한 것은 아니지만 하드 코딩 된 동작을 이용하는 것이 가장 간단한 해결책 일 수 있습니다. 모든 DateTimes를 복사하고 서버를 떠나기 전에 밀리 초를 0으로 재설정하십시오.
또는 영향을받는 작업에 사용자 지정 IDispatchMessageFormatter 또는 IDispatchMessageInspector를 연결해야합니다. 그들이 일반적이고 쉽게 연결되기를 원한다면 공원을 걷지도 않습니다.
소수의 초를 이해하지 못하는 클라이언트가 궁금한가요?
0
이 문제를 처리 할 수있는 몇 가지 방법을 찾아 냈습니다. 보다 복잡한 메소드에는 커스텀 MessageFormatter Endpoint를 후킹하는 것이 포함됩니다.
우리는이 간단한 방법을 발견했습니다.
초의 소수 부분은 datetime 개체에있는 경우에만 생성됩니다.
우리가 무슨 짓을 :
우리는 날짜 시간 데이터 유형을 감지하는 반사를 사용의 PropertyChange 이벤트 핸들러에 정적 만들었습니다. 발견되면 초 단위로 datetime을 다시 만듭니다. 우리의 경우에는 초를 전혀 신경 쓰지 않았습니다. 부분 클래스 생성자에서 이벤트를 연결합니다. 그게 전부 야. 물론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. jqGrid colModel DateTime sort
- 2. sort datetime 범위
- 3. .Net에서 웹 서비스의 인코딩을 변경하는 방법은 무엇입니까?
- 4. C# .NET에서 동적으로 backgroundimage를 변경하는 방법은 무엇입니까?
- 5. Powershell Sort-Object by [DateTime] :: ParseExact
- 6. PHP에서 XSD datetime 형식을 읽는 방법은 무엇입니까?
- 7. Universal 응용 프로그램을 만드는 방법은 무엇입니까?
- 8. Formtastic에서 datetime 간격을 변경하는 방법
- 9. Zend_Date :: isDate가 $ format을 적용하지 않습니다.
- 10. OSX에서`sort -V`하는 방법은?
- 11. UTC 및 Universal Time
- 12. UIActionSheet보기를 변경하는 방법은 무엇입니까?
- 13. ExchangeConnectionMode를 변경하는 방법은 무엇입니까?
- 14. .NET에서 Null 날짜를 처리하는 표준 방법은 무엇입니까
- 15. SQL 서버 datetime 필드에서 datetime 형식을 지정하는 올바른 방법은 무엇입니까
- 16. DataGridView에 DateTime 개체가 표시되는 방식을 변경하는 방법
- 17. Windows 휴대폰에서 날짜 형식을 변경하는 방법은 무엇입니까?
- 18. .NET에서 직렬화되는 클래스를 리팩토링하는 방법은 무엇입니까?
- 19. .NET에서 Winforms를 자동화하는 방법은 무엇입니까?
- 20. net에서 xml을 파싱하는 방법은 무엇입니까?
- 21. .net에서 네트워킹을 구성하는 방법은 무엇입니까?
- 22. .Net에서 보안을 구현하는 방법은 무엇입니까?
- 23. merge part in merge sort
- 24. common_test에서 io : format을 호출하면 어디로 이동합니까?
- 25. Python 목록에서 sort + uniq를 수행하는 가장 깨끗한 방법은 무엇입니까?
- 26. Ipad/iphone..universal app
- 27. Universal iPhone/iPad appDelegates
- 28. android universal landscape check
- 29. Universal App, 별도로 타겟팅해야합니까?
- 30. Clickonce universal publish