2010-09-21 8 views
4

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.

Répondre

2

Selon le docs, il n'y a aucune allocation pour les octets. Une propriété de chaîne de caractères codée base64 substitut est probablement votre meilleur pari (est-ce un bidouillage si c'est par conception?).

+0

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 –

+0

mais ne devrait pas le xmlserializer être responsable de la conversion? après tout xml est tout simplement un texte de toute façon. –

+0

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'. –

Questions connexes