Dav*_*vid 5 c# serialization binaryformatter .net-assembly
我有以下方法来生成对象的散列。它工作得很好!但是当我更改程序集的版本时,即使对象相同,哈希也会发生变化。
public static string GetHash(Object item)
{
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, item);
binaryFormatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();
memoryStream.Seek(0, SeekOrigin.Begin);
return Convert.ToBase64String(hashAlgorithm.ComputeHash(memoryStream));
}
Run Code Online (Sandbox Code Playgroud)
怎么可能忽略程序集版本?
但是,当我更改程序集的版本时,即使对象相同,哈希值也会发生变化。
是的,这是使用时的预期行为BinaryFormatter...它不能保证创建相同的输出 - 特别是因为它包含完整的类型信息(包括版本),所以几乎可以保证在版本之间进行更改。
我会考虑使用不包含类型信息的序列化器;XmlSerializer、Json.NET 或 protobuf-net 会立即浮现在脑海中。
| 归档时间: |
|
| 查看次数: |
2641 次 |
| 最近记录: |