我在 C#/.NET 中的序列化存在问题,如果我在一个流中序列化对同一对象的多个引用,则这些引用在反序列化后不再相等。我正在使用默认的二进制序列化。让我绊倒的代码是:
Check ck1 = new Check();
Check ck2 = new Check();
ck1.Numbers = new int[] { 11, 12, 13 };
ck2.Numbers = ck1.Numbers;
Console.WriteLine(ReferenceEquals(ck1.Numbers, ck2.Numbers));
FileStream fs = new FileStream("d:\\deleteme-check3.txt", FileMode.Create, FileAccess.Write);
BinaryFormatter oos = new BinaryFormatter();
oos.Serialize(fs, ck1);
oos.Serialize(fs, ck2);
fs.Flush();
fs.Close();
fs = new FileStream("d:\\deleteme-check3.txt", FileMode.Open, FileAccess.Read);
oos = new BinaryFormatter();
Check ck3 = (Check)oos.Deserialize(fs);
Check ck4 = (Check)oos.Deserialize(fs);
Console.WriteLine(ReferenceEquals(ck3.Numbers, ck4.Numbers));
声明是
[Serializable]
class Check
{
public int[] Numbers = new int[] { 0, 1, 2 };
}
当我运行此代码时,我得到True
和False
. 我正在寻找我可以使用的功能,这些功能会给我True
和True
.
注意#1:我已经检查并看到了使用DataContractSerializer
and的引用MarshalByRefObject
,但我没有看到如何将这些功能应用于这个问题;
注意#2:我知道我可以编写自己的自定义序列化逻辑,但我想避免这种情况,而是使用默认序列化。例如,如果我在 Java 中使用默认序列化,我会得到True
andTrue
在这种情况下,我正在寻找 .NET 中的类似工具。