开发者

alter output of xml serialization

web service response passes back an xml file, one element is type Date, its format has timezone info, e.g.

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

my class has a field (DateTime) to receive the value, however, it simply change date to local time.

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

will be converted to

12-30-2010T02:00:00 (My local time is CST).

So the original timezone info is lost. what I want is just the time ignoring timezone info, simply

12-30-2010T10:00:00

or for some w开发者_C百科ay I can extract timezone info in the response, so I can adjust converted time back to original time before conversion.

Anyone know how to do this in C#?

thanks


DateTimeOffset is like DateTime but also preserves the original timezone offset information. Unfortunately, XmlSerializer does not support DateTimeOffset (DataContractSerializer does, but it will not serialize it to the string you expect).

If you have the option too, I'd recommend you use the DateTimeOffset type and an additional string property for serialization. Here's an example:

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

Your code would interact with the Time property while XmlSerializer will effectively use the TimeString property in its place. You can then precisely control how the conversion to/from xml is handled.

If you don't want to use the DateTimeOffset type, you could modify the TimeString methods to do something else (i.e. store the time in one field and the offset in another field).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜