Ejemplo n.º 1
0
        public void WriteValue <TBufferWriter>(ref Writer <TBufferWriter> writer, object value) where TBufferWriter : IBufferWriter <byte>
        {
            var type      = value.GetType();
            var callbacks = _serializationCallbacks.GetReferenceTypeCallbacks(type);
            var info      = new SerializationInfo(type, _formatterConverter);

            callbacks.OnSerializing?.Invoke(value, _streamingContext);
            ((System.Runtime.Serialization.ISerializable)value).GetObjectData(info, _streamingContext);

            var first = true;

            foreach (var field in info)
            {
                var surrogate = new SerializationEntrySurrogate
                {
                    Name  = field.Name,
                    Value = field.Value
                };

                _entrySerializer.WriteField(ref writer, first ? 1 : (uint)0, SerializationEntryCodec.SerializationEntryType, surrogate);
                if (first)
                {
                    first = false;
                }
            }

            callbacks.OnSerialized?.Invoke(value, _streamingContext);
        }