Как записать двоичный байтовый массив в свойство CData в XML - PullRequest
0 голосов
/ 29 мая 2018

У меня есть XML, который реализуется из IXmlSerializable.Я хочу добавить свойство CData, чтобы я мог добавить двоичные данные к свойству в XML.Я собираюсь передать XML и в другом приложении использовать двоичные данные.

Я знаю, что некоторые символы не смогут перевести определенные символы , но, игнорируя этот факт, как быЯ достиг этого?Я пробовал несколько способов из stackoverflow, но мне это не удалось.

    [XmlElementAttribute(ElementName = "test", Form = XmlSchemaForm.Unqualified)]
    [XmlElement("CDataElement")]
    public RawXml test
    {
        get
        {
            return test;
        }
        set
        {
            test= value;
        }
    }                                   

byte[] bAry= BinaryData;
item.Property= new CustomXML(bAry);

"item" и "CustomXML" оба являются производными от IXmlSerializable.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

XML - это текстовый контейнер.Вы не можете разместить двоичные данные в текстовом контейнере, не преобразовав их в какой-либо символьный перевод .

Большинство механизмов принимают двоичный файл и кодируют его как base64 неявно.

C # XmlWriter имеет метод XmlWriter.WriteBase64.

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

Не нужно вообще думать об этом ...

И просто упомянуть: нет необходимости в разделе CDATA здесь.CDATA - это то, что вам вообще не нужно и чего следует избегать ...

0 голосов
/ 29 мая 2018

Вам нужно будет сделать:

Convert.ToBase64String(yourBinaryData) и передать его как строку в CData, затем на другом конце вы захотите использовать: Convert.FromBase64String(yourCDataText)

Есливы действительно хотели отправлять двоичные данные через XML, что вы могли бы сделать:

<DATA>
  <BINARY>
    <BIT index="0">0</BIT>
    <BIT index="1">0</BIT>       
    ...
    <BIT index="99">1</BIT>
  </BINARY>
</DATA>

Однако вам лучше просто выполнять кодирование base64.

...