Как мне сериализовать двоичные данные без метатегов XML?

#c# #serialization

#c# #сериализация

Вопрос:

Я хочу запутать некоторые двоичные или текстовые данные, которые находятся в двоичном массиве byte[] , я могу выполнить преобразование в нужную мне строку, но XmlSerializer вывод включает дополнительную информацию. Существует ли другой сериализатор, который можно использовать для преобразования моих данных без добавления тегов XML? Если мне понадобится десериализовать его позже, я включу необходимые теги.

 byte[] baTest = new byte[256];
        for (int i = 0; i < 256; i  )
            baTest[i] = (byte) (i amp; 0xff);
        string MyTestString = ReadableXMLBinary(baTest);
        MessageBox.Show("My String is:n"   MyTestString);

static public string ReadableXMLBinary(byte[] baIn)
        {
            StringWriter s = new StringWriter();
            XmlSerializer xser = new XmlSerializer(typeof( byte[]));
            xser.Serialize(s, baIn);
            return s.ToString();
        }
 

Какие результаты:

 <?xml version="1.0" encoding="utf-16"?><base64Binary>AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0 P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5 jp6uvs7e7v8PHy8/T19vf4 fr7/P3 /w==</base64Binary>"
 

В принципе, я хочу, чтобы все было между <base64Binary> тегами.
Я знаю, что могу удалить текст внутри без особых усилий, но я подумал, что может быть чистое решение, которое кто-то может предложить.

Комментарии:

1. Вы хотите двоичную сериализацию? Похоже, вы выполняете двоичную сериализацию, а затем преобразуете в базовую строку 64. Но я не понимаю, почему у вас есть идентификатор xml перед данными.

2. Вам нужен корень в вашем XML-документе, base64binary который служит для этой цели. Если вы уберете это, у вас больше не будет xml. Можете ли вы пояснить, почему вы хотите избавиться от корня?

3. Мне не нужен XML, это был просто способ расширить двоичные данные лучшим способом, чем просто шестнадцатеричные («0» — «F») значения в строке. Я собирался написать свой собственный, но увидел, что сериализация XML сделала то, что я хотел для двоичных данных, но включила дополнительную информацию XML, которую я не сделал. Ответ — это именно то, что я искал.

Ответ №1:

Похоже, вам вообще не нужен XML?

Если это так, то используйте: string s = Convert.ToBase64String(baIn);

и преобразовать обратно: byte[] baOut = Convert.FromBase64String(s);