gpt4 book ai didi

c# - BinaryFormatter 忽略程序集版本

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:37 24 4
gpt4 key购买 nike

我有以下方法来生成对象的散列。它工作得很好!但是,当我更改程序集的版本时,即使对象相同,哈希也会发生变化。

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));
}

怎么可能忽略汇编版本呢?

最佳答案

But when I change the version of the assembly, the hash is changing even when the object is the same.

是的,这是使用 BinaryFormatter 时的预期行为...它不保证创建相同的输出 - 尤其是,因为它包含完整的类型信息(包括版本) 几乎可以保证在版本之间进行更改。

我会考虑使用不包含类型信息的序列化程序; XmlSerializer、Json.NET 或 protobuf-net 会跃入脑海。

关于c# - BinaryFormatter 忽略程序集版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53512536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com