La sérialisation d'un DataType=“temps” du champ à l'aide de XmlSerializer
J'obtiens un résultat impair lors de la sérialisation d'un champ de date /heure à l'aide de XmlSerializer.
J'ai la classe suivante:
public class RecordExample
{
[XmlElement("TheTime", DataType = "time")]
public DateTime TheTime { get; set; }
[XmlElement("TheDate", DataType = "date")]
public DateTime TheDate { get; set; }
public static bool Serialize(
Stream stream, object obj, Type objType, Encoding encoding)
{
try
{
var settings = new XmlWriterSettings { Encoding = encoding };
using (var writer = XmlWriter.Create(stream, settings))
{
var xmlSerializer = new XmlSerializer(objType);
if (writer != null) xmlSerializer.Serialize(writer, obj);
}
return true;
}
catch (Exception)
{
return false;
}
}
}
Quand j'appelle à l'utilisation de la XmlSerializer avec la suite de tests de code:
var obj = new RecordExample
{
TheDate = DateTime.Now.Date,
TheTime = new DateTime(0001, 1, 1, 12, 00, 00)
};
var ms = new MemoryStream();
RecordExample.Serialize(ms, obj, typeof(RecordExample), Encoding.UTF8);
txtSource2.Text = Encoding.UTF8.GetString(ms.ToArray());
- Je obtenir certains résultats étranges, voici le code xml qui est produite:
<?xml version="1.0" encoding="utf-8"?>
<RecordExample
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TheTime>12:00:00.0000000+00:00</TheTime>
<TheDate>2010-03-08</TheDate>
</RecordExample>
Aucune idée de comment je peux obtenir le "Time" élément pour contenir un temps qui ressemble plus à ceci:
<TheTime>12:00:00.0Z</TheTime>
...que c'est ce que je m'attendais?
Grâce
Dave
double possible de la Sérialisation DateTime sans en millisecondes et gmt
OriginalL'auteur CraftyFella | 2010-03-08
Vous devez vous connecter pour publier un commentaire.
prendre un coup d'oeil à cette question La sérialisation DateTime sans en millisecondes et gmt
vous pouvez mettre en œuvre
IXmlSerializable
, mais alors vous devez fournir une implémentation pour l'ensemble de la logique de sérialisation.pour autant que je sais que c'est la seule solution. Quand je dois le faire je le fais avec cette deuxième propriété.Si vous trouvez une meilleure solution s'il vous plaît laissez-moi savoir.Une solution qui n'implique la rédaction de votre propre XmlSerializer
OriginalL'auteur IordanTanev
J'ai eu différents problèmes avec moi-même... cependant, j'ai été de tenter de sérialiser un objet TimeSpan. La solution est d'avoir deux propriétés, l'une qui a tenu la plage de Temps, et celui qui a été une représentation de chaîne de la plage de Temps qui s'est Sérialisé. Ici, c'était le modèle:
Cependant, avec ce code, le temps est imprimé dans le format suivant:
Le W3C définition de la durée est ici ce qui explique cela.
OriginalL'auteur Nick
Expansion sur le commentaire que j'ai faite sur l'une des autres réponses.
La sérialisation comme ceci:
Exemple de sortie:
OriginalL'auteur João Angelo
Je suis d'accord avec les autres réponses (je n'ai pas été en fait écrit quand ils ont sauté vers le haut). il ne ressemble pas, il est possible, d'une manière directe.
Un coup d'oeil à la source avec Réflecteur montre qu'une valeur de temps finit par être converti en chaîne de caractères avec le Système.Xml.XmlConvert.ToString, qui a codé en dur format:
HH:mm:ss.fffffffzzzzzz
Donc deux propriétés, le vrai [XmlIgnore] et une chaîne que vous créez vous-même est une bonne façon d'aller.
OriginalL'auteur Timores