Example #1
0
        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);
            }
        }