예제 #1
0
        void ISerializableSerializer.WriteValue <TBufferWriter>(ref Writer <TBufferWriter> writer, object value)
        {
            var item = (T)value;

            _callbacks.OnSerializing?.Invoke(ref item, _streamingContext);

            var info = new SerializationInfo(Type, _formatterConverter);

            ((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(ref item, _streamingContext);
        }
예제 #2
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);
        }
예제 #3
0
        public void WriteValue(Writer writer, SerializerSession session, object value)
        {
            var type      = value.GetType();
            var callbacks = this.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(field);
                this.entrySerializer.WriteField(writer, session, first ? 1 : (uint)0, SerializationEntryCodec.SerializationEntryType, surrogate);
                if (first)
                {
                    first = false;
                }
            }

            callbacks.OnSerialized?.Invoke(value, streamingContext);
        }
예제 #4
0
        public void WriteValue(ref Writer writer, SerializerSession session, object value)
        {
            var item = (T)value;

            this.callbacks.OnSerializing?.Invoke(ref item, this.streamingContext);

            var info = new SerializationInfo(Type, this.formatterConverter);

            ((System.Runtime.Serialization.ISerializable)value).GetObjectData(info, this.streamingContext);

            var first = true;

            foreach (var field in info)
            {
                var surrogate = new SerializationEntrySurrogate(field);
                this.entrySerializer.WriteField(ref writer, session, first ? 1 : (uint)0, SerializationEntryCodec.SerializationEntryType, surrogate);
                if (first)
                {
                    first = false;
                }
            }

            this.callbacks.OnSerialized?.Invoke(ref item, this.streamingContext);
        }