2009-08-06 1 views
1

XmlAttribute 태그와 비슷한 것을 사용하여 DateTime을 serialize/deserialize하는 방법을 정의 할 수 있습니까? 과거에는 I 필드 문자열을 만들 것 다음 생성자에서 같은 것을 할 : 그러나XmlDateTimeSerializationMode를 사용하여 XML DateTime 특성에 태그를 지정하는 방법?

this.DateField = XmlConvert.ToString(passedObject.Date, XmlDateTimeSerializationMode.Utc); 

, 나는 실제로 필드는 날짜 시간이 어떻게 든 그것을로서 직렬화되어야 함을 태그하고 싶습니다 UTC :

[System.Xml.Serialization.XmlAttribute()] // XmlDateTimeSerializationMode tag here? 
public DateTime DateField; 

어떻게하면됩니까?

+0

줄 루어 (UTC)로 날짜가 연쇄되지 않는 문제가있었습니다. 날짜가 UTC 였기 때문에 (비록 내가 생각한다고해도). 다시 코드를 확인하십시오! SpecifyKind (..., ... UTC) 호출이 필요하지 않습니다. (XML 직렬화 된 날짜의 끝 부분에 Z가 붙지 않도록 할 수없는 다음 사람을위한 메모) –

+0

@Mark Hurd 그냥 명확하게 설명합니다. XML을 역 직렬화하기 위해 * XmlSerializer *를 사용하고 * xs : dateTime * 값에 "Z"가 추가되면 my * DateTime * 속성에 * DateTime.Kind * 속성이 * DateTimeKind로 설정됩니다. Utc. * 맞습니까? – RunnerRick

+0

@RickRoth 그랬 으면 좋겠지 만 모르겠다. 우리 응용 프로그램은 직렬화에만 사용했다. –

답변

1

데이터를 그대로 직렬화하지 않고 선을 넘어서 변환 한 다음 직렬화 할 때 속성을 통해이를 수행 할 수 있는지 확신 할 수 없습니다.

당신은 아마도하는 UTC 보호 속성을 추가하여 사용자가 데이터를 표현하는 방식을 변경하여 동일한 결과를 얻을 수

, 즉 :

public DateTime DateField; 

[System.Xml.Serialization.XmlAttribute("DateField")] 
protected DateTime UtcDateField 
{ 
    get 
    { 
     //Convert DateField to UTC 
    } 

    set 
    { 
     DateField = //Convert value from UTC 
    } 
} 
+0

감사합니다. Matt! 실제로 실제로 DateField XmlIgnore 특성을 추가 할 필요가 없거나 그렇지 않으면 요소로 serialize합니다. –

0

또 다른 옵션은 IXmlSerializable 인터페이스를 상속 모든 읽기를 처리하는 것입니다 수동으로 직렬화를 작성하십시오. 속성과 같이 간결하거나 자동적이지는 않지만 필요로하는 제어 기능을 제공 할 것이므로 직렬화 프로세스를 위해서만 특수 포맷 된 필드를 만드는 것보다 이해하기 쉽다고 생각합니다.

관련 문제