我有以下方法来生成对象的哈希值。效果非常好!但是,当我更改程序集的版本时,即使对象相同,哈希值也会发生变化。
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));
}
怎么可能忽略汇编版本呢?
但是,当我更改程序集的版本时,即使对象相同,哈希值也会发生变化。
是的,这是使用时的预期行为BinaryFormatter
...它不保证创建相同的输出 - 并且尤其由于它包含完整的类型信息(包括版本),因此几乎可以保证在版本之间进行更改。
我会考虑使用不包含类型信息的序列化器;XmlSerializer
、Json.NET 或 protobuf-net 会立即浮现在脑海中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)