2008-09-19 29 views
11

Tôi đã tạo tệp lớp C# bằng cách sử dụng tệp XSD làm đầu vào. Một trong những đặc tính của tôi trông như thế này:Nối tiếp DateTime thành thời gian không có mili giây và gmt

private System.DateTime timeField; 

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

Khi đăng, các nội dung của tập tin bây giờ trông như thế này:

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

Có thể, với XmlAttributes trên tài sản, để có nó làm cho không mili giây và giá trị GMT như thế này?

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

Điều này có thể xảy ra hay tôi cần phải hack cùng một số loại xsl/xpath-replace-magic sau khi lớp học đã được sắp xếp theo thứ tự? Nó không phải là một giải pháp để thay đổi đối tượng thành String, bởi vì nó được sử dụng như một DateTime trong phần còn lại của ứng dụng và cho phép chúng ta tạo một biểu diễn xml từ một đối tượng bằng cách sử dụng phương thức XmlSerializer.Serialize() .

Lý do tôi cần xóa thông tin bổ sung khỏi trường là hệ thống nhận không tuân theo tiêu chuẩn w3c cho kiểu dữ liệu thời gian.

+0

Nhìn vào http://stackoverflow.com/questions/3534525/force-xmlserializer-to-serialize-datetime-as-yyyy-mm-dd-hhmmss – TNT

Trả lời

13

Bạn có thể tạo thuộc tính chuỗi thực hiện dịch sang/từ trường timeField của bạn và đặt thuộc tính tuần tự hóa trên đó thay vì thuộc tính DateTime thực mà phần còn lại của ứng dụng sử dụng.

+0

Tôi đã phải làm chính xác như vậy ngày hôm nay :) – leppie

+0

Điều này cũng sẽ làm việc nếu chúng ta sau này cần phải deserialize cùng một tập tin? – Espo

+0

Espo: yes, sẽ xem mã trong câu trả lời của tôi :) –

21

Đặt [XmlIgnore] vào thuộc tính Thời gian.

Sau đó, thêm một tài sản mới:

[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); } 
} 
+2

Là '" yyyy-MM-dd "' chuỗi định dạng đúng cho một trường thời gian? Trong khi giải pháp này đã không làm việc cho tôi ra khỏi hộp, nó đã dẫn tôi đến một trong đó đã làm. Tôi đã phải sử dụng '" HH: mm: ss "', và tôi có nguồn gốc từ 'dateField' của tôi như thế này' get {return this.dateField.ToString ("HH: mm: ss"); } ' – OutstandingBill

Các vấn đề liên quan