C #: байтовый массив в xml CData - PullRequest
2 голосов
/ 08 июня 2009

У меня есть служба WCF, которая возвращает блок xml. Одним из элементов является раздел CData []. Мое приложение считывает файл HTML из базы данных и преобразует его в массив PDF byte [], используя ABCPDF. Затем в моем XmlWriter я добавляю байты в раздел CData.

Проблема в том, что полученный XML выглядит так:

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

Как я могу получить строку байтов в раздел CData? Я пробовал такие вещи, как:

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

и

Convert.ToBase64String(theData);

Я застрял! Любая помощь будет отличной, спасибо!

Ответы [ 2 ]

7 голосов
/ 08 июня 2009

Использование Convert.ToBase64String(data) - это определенно способ пойти сюда, если у вас есть контроль над обоими концами. Вы не хотите отправлять «сырые» байты и делать вид, что они являются действительными текстовыми данными. Используйте Convert.FromBase64String(text) на другой стороне.

Я немного удивлен, что WCF не обрабатывает это автоматически. Я не могу сказать, что использовал это сам (Марк Грэвелл мог бы появиться - у него большой опыт, я полагаю), но я ожидал бы, что это просто покажет байтовые массивы. Почему вы вовлечены на уровне XML?

0 голосов
/ 08 июня 2009

Трудно сказать, где именно происходит ваша проблема - может помочь более полный пример кода. Но из того, что вы показываете как сериализацию - это выглядит ужасно, как будто ToString() вызывается на вашем byte[].

Вам следует использовать Convert.ToBase64String(), если вы пытаетесь отправить двоичные данные по сети. Если вы не контролируете формат приема, вам нужно выяснить, какая кодировка требуется.

...