J'ai un utilitaire de sérialisation qui sérialise un objet à un XDocument. Il fonctionne très bien:Manière la plus élégante de sérialiser un objet avec des membres byte [] vers un XDocument?
public static class SerializationUtil
{
public static T Deserialize<T>(XDocument doc)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (var reader = doc.Root.CreateReader())
{
return (T)xmlSerializer.Deserialize(reader);
}
}
public static XDocument Serialize<T>(T value)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
XDocument doc = new XDocument(z);
using (var writer = doc.CreateWriter())
{
xmlSerializer.Serialize(writer, value);
}
return doc;
}
utilise assez heureux et tout à coup je reçois:
There was an error generating the XML document.
L'exception intérieure est:
This XmlWriter does not support base64 encoded data.
Transforme que la méthode d'instance XDocument.CreateWriter()
vous donne un écrivain de type System.Xml.XmlWellFormedWriter
, et que cet écrivain ne peut pas écrire des données codées en base64 (mon objet contient un octet []). MSDN ne semble même pas mentionner cette classe - mais je n'arrive pas à créer un autre type d'écrivain à partir de XDocument
.
Je pourrais juste sérialiser à une chaîne, mais j'essayais d'être intelligent et d'éviter d'utiliser des hacks. Tout moyen de sérialiser XDocument lorsque base64 est nécessaire pour certains champs.
ah ok - j'ai juste supposé que tout XML valide pouvait être supporté. Je souhaite juste que le XmlSerializer était assez intelligent pour le gérer pour moi. je reviendrai juste à la sérialisation à un StringWriter qui fonctionne bien –
mais ne devrait pas le xmlserializer être responsable de la conversion? après tout xml est tout simplement un texte de toute façon. –
Le sérialiseur _is_ le convertit, mais le 'XmlWriter' de' XDocument' n'aime pas sa conversion - c'est l'erreur que vous obtenez. Il peut y avoir d'autres XmlWriters qui n'ont pas le même problème - par exemple, au lieu d'utiliser un 'System.Xml.Linq.XDocument', vous pourriez avoir plus de chance d'utiliser' System.Xml.XmlDocument'. –