将BinarySerialized字节数组转换为可读字符串

时间:2018-12-19 15:32:18

标签: c# .net binaryformatter binary-serialization

当您使用BinaryFormatter对.Net中的对象进行二进制序列化时,最终会得到一个字节数组,这显然对人类没有意义。

此字节数组是否对应于人类可读的更有意义的字符串表示形式?还是您需要对其进行完全反序列化以使其更易于阅读?

我希望二进制格式化程序在发出字节数组之前对它使用的对象具有某种中间字符串表示形式。完全可以满足我的需求...

我尝试对字节数组进行Base64编码,但最终却变得乱码。

编辑:

正如我的回答所述,UTF8编码是您可以获得的最好的编码。

我要这样做的原因是,我可以对两个binarySerialization进行差异化处理,并且仅存储第一个序列化和差异化处理,并且对查看序列化的工作方式感兴趣,以便找出如何最好地对字节数组进行差异化。

1 个答案:

答案 0 :(得分:0)

How to analyse contents of binary serialization stream?更详细地讨论了二进制序列化的格式,并且还提供了指向各种分析器的链接。

没有完全人类可读的中间表示形式,但是使用Console.WriteLine(System.Text.Encoding.UTF8.GetString(bytes));会返回可能可行的内容,具体取决于所需的确切目的。

请注意,使用UTF8只能解码某些字节,因为字节数组的仅一部分是UTF8编码的。结果字符串中会有很多unfound-symbold。

作为示例,序列化以下内容并将结果转换为UTF8字符串:

namespace MyNamespace
{
    [Serializable]
    public class Class
    {
        private readonly int _int = 42;

        public string String { get; } = "MyString";
    }
}

结果:

"    ????          ConsoleApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null   MyNamespace.Class   _int<String>k__BackingField   *    MyString"

不是完全没用的...