2011-07-06 40 views
5

phản hồi dịch vụ web trả lại tệp xml, một phần tử là loại Ngày, định dạng của nó có thông tin múi giờ, ví dụ:thay đổi đầu ra của xml serialization

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

lớp học của tôi có một trường (DateTime) để nhận được giá trị, tuy nhiên, nó chỉ đơn giản là thay đổi ngày giờ cục bộ.

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

sẽ được chuyển đổi sang

12-30-2010T02:00:00 (theo giờ địa phương của tôi là CST).

Vì vậy, thông tin múi giờ ban đầu bị mất. những gì tôi muốn chỉ là thời gian bỏ qua các thông tin múi giờ, chỉ cần

12-30-2010T10:00:00

hoặc một cách nào đó tôi có thể trích xuất thông tin múi giờ trong phản ứng, vì vậy tôi có thể điều chỉnh thời gian chuyển đổi trở lại thời gian ban đầu trước khi chuyển đổi.

Bất kỳ ai biết cách thực hiện việc này trong C#?

nhờ

+0

Làm thế nào để bạn deserializing xml thành một thể hiện của lớp học của bạn? Bạn đang sử dụng 'XmlSerializer'? –

+0

Có, tôi đang sử dụng xmlSerializer – toosensitive

Trả lời

2

DateTimeOffset là như DateTime mà còn giữ gìn múi giờ thông tin bù đắp gốc. Thật không may, XmlSerializer không hỗ trợ DateTimeOffset (DataContractSerializer, nhưng nó sẽ không serialize nó vào chuỗi bạn mong đợi).

Nếu bạn có tùy chọn, tôi khuyên bạn nên sử dụng loại DateTimeOffset và thuộc tính bổ sung string để tuần tự hóa. Dưới đây là một ví dụ:

[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; } 
} 

Mã của bạn sẽ tương tác với Time tài sản trong khi XmlSerializer hiệu quả sẽ sử dụng TimeString tài sản ở chỗ của nó. Sau đó, bạn có thể kiểm soát chính xác cách chuyển đổi thành/từ xml được xử lý.

Nếu bạn không muốn sử dụng loại DateTimeOffset, bạn có thể sửa đổi các phương pháp TimeString để làm điều gì đó khác (ví dụ: lưu trữ thời gian trong một trường và chênh lệch trong trường khác).

+0

cảm ơn rất nhiều, Michael! Nó hoạt động – toosensitive