通过比较它们的序列化字节数组来比较类的两个实例是否可靠?

Val*_*yev 12 c# comparison serialization

给定一个类的两个实例,通过首先对它们进行序列化然后比较字节数组(或者可能是数组的哈希值)来比较它们是一种好的和可靠的做法.这些对象可能具有复杂的层次结构属性,但序列化应尽可能深入.

相比之下,我指的是确保原始类型的所有属性具有相等值的过程,复杂类型的属性具有相等的原始类型属性等.至于集合属性,它们应该彼此相等:相等的元素,相同的位置:

{'a','b','c'} != {'a','c','b'}



 {new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}} 
    !=
 {new Customer{Id=3, Name="def"}, new Customer {Id=2, Name="abc"}}
Run Code Online (Sandbox Code Playgroud)

 {new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}}
    ==
 {new Customer{Id=2, Name="abc"}, new Customer {Id=3, Name="def"}}
Run Code Online (Sandbox Code Playgroud)

通过序列化我的意思是标准的.NET二进制格式化程序.

谢谢.

Han*_*ant 5

您要求保证序列化表示将匹配.这将是非常难以实现的,BinaryFormatter是一个复杂的类.特别是具有对齐填充的序列化结构可能是潜在的问题.

更简单的是提供一个不匹配的例子.System.Decimal具有不同的字节模式,用于0.01M和0.010M之类的值.它的运算符==()表示它们是相等的,它的序列化字节[]不会.