public void Serialize(object obj, BinaryDataWriter writer, IBaseline <TKey> baseline) { IBinaryObjectCollection <TKey> collections = (IBinaryObjectCollection <TKey>)obj; List <TKey> baseKeys = new List <TKey>(baseline.BaselineKeys); foreach (TKey key in collections.Keys) { BinaryDataWriter itemWriter = writer.TryWriteNode(_keySize); Baseline <byte> itemBaseline = baseline.GetOrCreateBaseline <Baseline <byte> >(key, _itemSerializer.Count, out bool isNew); _itemSerializer.Serialize(collections[key], itemWriter, itemBaseline); if (itemWriter.Length > 0 || isNew) { _writer.Write(writer, key); itemWriter.PushNode(); } baseKeys.Remove(key); } if (baseKeys.Count <= 0) { return; } _writer.Write(writer, _reservedKey); foreach (TKey key in baseKeys) { _writer.Write(writer, key); baseline.DestroyBaseline(key); } }