将 BinarySerialized 字节数组转换为可读字符串
Convert BinarySerialized Byte Array to readable string
当您使用 BinaryFormatter 对 .Net 中的对象进行二进制序列化时,您最终会得到一个字节数组,这对人类来说显然毫无意义。
这个字节数组是否对应于人类可读的更有意义的字符串表示形式?或者您是否需要完全反序列化它以使其更易于阅读?
我希望二进制格式化程序在发出字节数组之前有一些它使用的对象的中间字符串表示。那将非常适合我的需要...
我尝试对字节数组进行 Base64 编码,但结果是乱码。
编辑:
如我的回答所述,UTF8 编码是您可以获得的最佳编码。
我想这样做的原因是我可以比较两个 binarySerializations 并且只存储第一个序列化和差异,并且有兴趣了解序列化是如何工作的以便找出如何最好地比较字节数组。
How to analyse contents of binary serialization stream? 更详细地讨论了二进制序列化的格式,还有一个 link 到各种分析器。
没有完全人类可读的中间表示,但使用 Console.WriteLine(System.Text.Encoding.UTF8.GetString(bytes));
将 return 一些可能可行的东西,具体取决于需要它的确切目的。
请注意,只有部分字节可以使用 UTF8 解码,因为只有部分字节数组采用 UTF8 编码。结果字符串中会有很多未找到的符号。
作为序列化以下内容并将结果转换为 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"
这不是完全没用...
当您使用 BinaryFormatter 对 .Net 中的对象进行二进制序列化时,您最终会得到一个字节数组,这对人类来说显然毫无意义。
这个字节数组是否对应于人类可读的更有意义的字符串表示形式?或者您是否需要完全反序列化它以使其更易于阅读?
我希望二进制格式化程序在发出字节数组之前有一些它使用的对象的中间字符串表示。那将非常适合我的需要...
我尝试对字节数组进行 Base64 编码,但结果是乱码。
编辑:
如我的回答所述,UTF8 编码是您可以获得的最佳编码。
我想这样做的原因是我可以比较两个 binarySerializations 并且只存储第一个序列化和差异,并且有兴趣了解序列化是如何工作的以便找出如何最好地比较字节数组。
How to analyse contents of binary serialization stream? 更详细地讨论了二进制序列化的格式,还有一个 link 到各种分析器。
没有完全人类可读的中间表示,但使用 Console.WriteLine(System.Text.Encoding.UTF8.GetString(bytes));
将 return 一些可能可行的东西,具体取决于需要它的确切目的。
请注意,只有部分字节可以使用 UTF8 解码,因为只有部分字节数组采用 UTF8 编码。结果字符串中会有很多未找到的符号。
作为序列化以下内容并将结果转换为 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"
这不是完全没用...