2011-07-06 13 views
5

la respuesta del servicio web devuelve un archivo xml, un elemento es tipo Fecha, su formato tiene información de zona horaria, p.alterar el resultado de la serialización xml

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

mi clase tiene un campo (DateTime) para recibir el valor, sin embargo, basta con cambiar la fecha con la hora local.

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

se convertirá en

12-30-2010T02:00:00 (Mi hora local es CST).

Así que la información original de la zona horaria se pierde. lo que yo quiero es simplemente el tiempo haciendo caso omiso de información zona horaria, simplemente

12-30-2010T10:00:00

o por alguna forma de que pueda extraer información zona horaria en la respuesta, por lo que se puede ajustar el tiempo convertida de nuevo a tiempo original antes de la conversión.

¿Alguien sabe cómo hacer esto en C#?

gracias

+0

¿Cómo deserializas el xml en una instancia de tu clase? ¿Estás usando 'XmlSerializer'? –

+0

Sí, estoy usando xmlSerializer – toosensitive

Respuesta

2

DateTimeOffset es como DateTime sino que también conserva la información de desplazamiento zona horaria originales. Lamentablemente, XmlSerializer no es compatible con DateTimeOffset (DataContractSerializer lo hace, pero no lo serializará en la cadena que espera).

Si tiene la opción también, le recomiendo que use el tipo DateTimeOffset y una propiedad adicional string para la serialización. He aquí un ejemplo:

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

Su código interactuaría con la propiedad Time mientras XmlSerializer utilizará eficazmente la propiedad TimeString en su lugar. A continuación, puede controlar con precisión cómo se maneja la conversión a/desde xml.

Si no desea utilizar el tipo DateTimeOffset, puede modificar los métodos TimeString para hacer otra cosa (es decir, almacenar la hora en un campo y el desplazamiento en otro campo).

+0

¡muchas gracias, Michael! Funciona – toosensitive

Cuestiones relacionadas