2009-06-08 10 views
1

J'ai un service WCF qui retourne un bloc de xml. Un élément est une section CData []. Mon application lit un fichier HTML hors de la base de données et le convertit en un tableau PDF byte [] en utilisant ABCPDF. Ensuite, dans mon XmlWriter Im ajouter les octets à la section CData.C#: tableau d'octets en XML CData

Le problème est le xml résultant ressemble à ceci:

<![CDATA[System.Byte[]]]> 

Comment puis-je obtenir la chaîne d'octets dans la section CDATA? J'ai essayé des choses comme:

string str; 
ASCIIEncoding enc = new ASCIIEncoding(); 
str = enc.GetString(theData); 

et

Convert.ToBase64String(theData); 

Im coincé !! Toute aide serait super, merci!

+0

Qu'est-ce que vous obtenez dans votre sortie lorsque vous utilisez Convert.ToBase64String? C'est probablement le meilleur moyen de le faire (en utilisant ASCIIEncoding.GetString ne fonctionne que si les octets représentent une chaîne ASCII valide). –

Répondre

6

En utilisant Convert.ToBase64String(data) est définitivement la façon d'aller ici si vous avez le contrôle des deux extrémités. Vous ne voulez pas envoyer d'octets "bruts" et prétendre qu'ils sont des données textuelles valides. Utilisez Convert.FromBase64String(text) de l'autre côté.

Je suis légèrement surpris que WCF ne gère pas cela automatiquement pour vous. Je ne peux pas dire que je l'ai utilisé moi-même (Marc Gravell pourrait apparaître - il a beaucoup d'expérience avec ça, je crois) mais je m'attendrais juste à ce qu'il expose des tableaux d'octets. Pourquoi êtes-vous impliqué au niveau du XML?

+0

De manière spécifique, de nombreux caractères de contrôle ne sont pas autorisés dans les documents XML, y compris nul (0). – Richard

+0

Convert.ToBase64String() fonctionne maintenant, je retournais toujours le tableau d'octets dans ma méthode. Grrrr !!! Je vous remercie... – Blaze

0

Il est difficile de dire exactement où votre problème se produit - un exemple de code plus complet pourrait vous aider. Mais à partir de ce que vous montrez comme étant sérialisé - il ressemble énormément à ToString() s'appelle sur votre byte[].

Vous devriez envisager d'utiliser Convert.ToBase64String() si vous essayez d'envoyer des données binaires sur le réseau. Si vous n'avez pas le contrôle du format de réception, vous devez examiner le codage requis.