2011-07-06 3 views
5

웹 서비스 응답이 xml 파일을 반환합니다. 한 요소는 Date 유형이며 해당 형식의 시간대 정보가 있습니다.xml serialization의 출력을 변경합니다.

12-30-2010T10:00:00+1:00

내 클래스는하지만, 단순히 현지 시간으로 날짜를 변경, 값을받을 수있는 필드 (날짜 시간)가 있습니다.

12-30-2010T10:00:00+1:00

12-30-2010T02:00:00 (내 현지 시간 CST입니다)로 변환됩니다.

그래서 원래 표준 시간대 정보가 손실됩니다. 내가 원하는 단순히

12-30-2010T10:00:00

, 단지 시간을 무시 시간대 정보 또는 어떤 방법을 나는 응답 시간대 정보를 추출 할 수 있습니다, 그래서 변환하기 전에 다시 원래 시간으로 변환 시간을 조정할 수 있습니다.

누구나 C#에서이 작업을 수행 할 수 있습니다.

감사

+0

xml을 클래스의 인스턴스로 역 직렬화하는 방법은 무엇입니까? 'XmlSerializer'를 사용하고 있습니까? –

+0

예, xmlSerializer를 사용하고 있습니다. – toosensitive

답변

2

DateTimeOffsetDateTime처럼뿐만 아니라 원래의 시간대 오프셋 정보를 유지합니다. 불행하게도 XmlSerializerDateTimeOffset을 지원하지 않지만 (DataContractSerializer은 예상 한 문자열로 직렬화하지 않습니다).

옵션을 사용하는 경우 DateTimeOffset 유형과 추가로 string 속성을 사용하여 직렬화하는 것이 좋습니다. 다음 예는 다음과 같습니다 XmlSerializer 효과적으로 그 자리에 TimeString 속성을 사용하면서

[Serializable] 
public class MyClass 
{ 
    const string TimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz"; 

    [XmlElement("Time")] 
    public string TimeString { get{return Time.ToString(TimeFormat);} set{Time = DateTimeOffset.ParseExact(value, TimeFormat, null);} } 

    [XmlIgnore] 
    public DateTimeOffset Time { get; set; } 
} 

귀하의 코드는 Time 특성과 상호 작용하는 것입니다. 그런 다음 xml과의 변환을 처리하는 방법을 정확하게 제어 할 수 있습니다.

DateTimeOffset 유형을 사용하지 않으려면 TimeString 메소드를 수정하여 다른 작업 (즉, 한 필드에 시간을 저장하고 다른 필드에 오프셋을 저장)을 할 수 있습니다.

+0

감사합니다. Michael! 그것은 작동합니다. – toosensitive

관련 문제