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);
            }
        }
Example #2
0
        public void Serialize(object obj, BinaryDataWriter writer, IBaseline <TKey> baseline)
        {
            BinaryDataWriter     childWriter  = writer.TryWriteNode(sizeof(byte));
            Baseline <TChildKey> itemBaseline = baseline.GetOrCreateBaseline <Baseline <TChildKey> >(_index, _valuesCount, out bool isNew);

            _serializer.Serialize(_getter(obj), childWriter, itemBaseline);

            if (childWriter.Length <= 0 && !isNew)
            {
                return;
            }

            WriteKey(_index, writer);
            childWriter.PushNode();
        }