Serialização de DateTime em tempos sem milissegundos e GMT
-
01-07-2019 - |
Pergunta
Eu criei um arquivo de classe C # usando um arquivo XSD como uma entrada. Uma das minhas propriedades parecido com este:
private System.DateTime timeField;
[System.Xml.Serialization.XmlElementAttribute(DataType="time")]
public System.DateTime Time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
Quando serializado, o conteúdo do arquivo agora se parece com isso:
<Time>14:04:02.1661975+02:00</Time>
É possível, com XmlAttributes na propriedade, para tê-lo tornar sem os milissegundos e a GMT-valor como este?
<Time>14:04:02</Time>
Isso é possível, ou eu preciso fazer para cortar juntos algum tipo de xsl / xpath-substituir-magic depois que a classe tem sido serializado?
não é uma solução para alterar o objecto de corda, uma vez que é utilizado como um DateTime no resto do pedido e permite-nos criar um xml-representação de um objecto utilizando o método () XmlSerializer.Serialize.
A razão que eu preciso para remover a informação extra do campo é que o sistema de recepção não se conforma com as W3C-padrões para o tipo de dados tempo.
Solução
Você pode criar uma propriedade string que faz a tradução de / para o seu campo TimeField e colocar o atributo de serialização em que, em vez da propriedade DateTime real que o resto dos usos da aplicação.
Outras dicas
Coloque [XmlIgnore] na propriedade Time.
Em seguida, adicione uma nova propriedade:
[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); }
}