我在.NET的二进制序列化中遇到了奇怪的行为,至少在我的预期中是这样。
在OnDeserialization回调之后,加载的Dictionary的所有项都会添加到其父对象中。相比之下,List采用了另一种方式。在现实世界的存储库代码中,这可能真的很烦人,例如当您需要向字典项添加一些委托时。请检查示例代码并查看断言。
这是正常行为吗?
[Serializable]
public class Data : IDeserializationCallback
{
    public List<string> List { get; set; }
    public Dictionary<string, string> Dictionary { get; set; }
    public Data()
    {
        Dictionary = new Dictionary<string, string> { { "hello", "hello" }, { "CU", "CU" } };
        List = new List<string> { "hello", "CU" };
    }
    public static Data Load(string filename)
    {
        using (Stream stream = File.OpenRead(filename))
        {
            Data result = (Data)new BinaryFormatter().Deserialize(stream);
            TestsLengthsOfDataStructures(result);
            return result;
        }
    }
    public void Save(string fileName)
    {
        using (Stream stream = File.Create(fileName))
        {
            new BinaryFormatter().Serialize(stream, this);
        }
    }
    public void OnDeserialization(object sender)
    {
        TestsLengthsOfDataStructures(this);
    }
    private static void TestsLengthsOfDataStructures(Data data)
    {
        Debug.Assert(data.List.Count == 2, "List");
        Debug.Assert(data.Dictionary.Count == 2, "Dictionary");
    }
}https://stackoverflow.com/questions/457134
复制相似问题