문제

XSD 파일을 입력으로 사용하여 C# 클래스 파일을 만들었습니다.내 속성 중 하나는 다음과 같습니다.

 private System.DateTime timeField;

 [System.Xml.Serialization.XmlElementAttribute(DataType="time")]
 public System.DateTime Time {
     get {
         return this.timeField;
     }
     set {
         this.timeField = value;
     }
 }

직렬화되면 파일 내용은 이제 다음과 같습니다.

<Time>14:04:02.1661975+02:00</Time>

속성에 XmlAttributes를 사용하면 이와 같이 밀리초 및 GMT 값 없이 렌더링할 수 있습니까?

<Time>14:04:02</Time>

이것이 가능합니까, 아니면 클래스가 직렬화된 후에 일종의 xsl/xpath-replace-magic을 함께 해킹해야 합니까?

이는 응용 프로그램의 나머지 부분에서 DateTime처럼 사용되고 XmlSerializer.Serialize() 메서드를 사용하여 개체에서 xml 표현을 만들 수 있도록 허용하므로 개체를 문자열로 변경하는 솔루션이 아닙니다.

필드에서 추가 정보를 제거해야 하는 이유는 수신 시스템이 시간 데이터 유형에 대한 w3c 표준을 따르지 않기 때문입니다.

도움이 되었습니까?

해결책

timeField 필드와의 변환을 수행하는 문자열 속성을 생성하고 애플리케이션의 나머지 부분에서 사용하는 실제 DateTime 속성 대신 직렬화 속성을 넣을 수 있습니다.

다른 팁

Time 속성에 [XmlIgnore]를 입력합니다.

그런 다음 새 속성을 추가합니다.

[XmlElement(DataType="string",ElementName="Time")]
public String TimeString
{
    get { return this.timeField.ToString("yyyy-MM-dd"); }
    set { this.timeField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture); }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top