Beispiel #1
0
        /// <summary>
        /// Creates a deep copy of an object
        /// </summary>
        /// <param name="original">The object to create a copy of</param>
        /// <param name="context">The copy context.</param>
        /// <returns>The copy.</returns>
        public static object DeepCopy(object original, ICopyContext context)
        {
            var source = original as AzureQueueBatchContainerV2;

            if (source == null)
            {
                throw new ArgumentNullException(nameof(original));
            }

            var copy = new AzureQueueBatchContainerV2();

            context.RecordCopy(original, copy);
            var           token  = source.sequenceToken == null ? null : new EventSequenceTokenV2(source.sequenceToken.SequenceNumber, source.sequenceToken.EventIndex);
            List <object> events = null;

            if (source.events != null)
            {
                events = new List <object>(source.events.Count);
                foreach (var item in source.events)
                {
                    events.Add(SerializationManager.DeepCopyInner(item, context));
                }
            }

            var ctx = source.requestContext?.ToDictionary(kv => kv.Key, kv => SerializationManager.DeepCopyInner(kv.Value, context));

            copy.SetValues(source.StreamGuid, source.StreamNamespace, events, ctx, token);
            return(copy);
        }
Beispiel #2
0
        /// <summary>
        /// Deserializes the container from the data stream.
        /// </summary>
        /// <param name="expected">The expected type</param>
        /// <param name="reader">The stream reader</param>
        /// <returns>The deserialized value</returns>
        public static object Deserialize(Type expected, BinaryTokenStreamReader reader)
        {
            var deserialized = new AzureQueueBatchContainerV2();

            DeserializationContext.Current.RecordObject(deserialized);
            var guid       = reader.ReadGuid();
            var ns         = reader.ReadString();
            var eventToken = SerializationManager.DeserializeInner <EventSequenceTokenV2>(reader);
            var events     = SerializationManager.DeserializeInner <List <object> >(reader);
            var context    = SerializationManager.DeserializeInner <Dictionary <string, object> >(reader);

            deserialized.SetValues(guid, ns, events, context, eventToken);
            return(deserialized);
        }
Beispiel #3
0
        /// <summary>
        /// Creates a deep copy of an object
        /// </summary>
        /// <param name="original">The object to create a copy of</param>
        /// <returns>The copy.</returns>
        public static object DeepCopy(object original)
        {
            var source = original as AzureQueueBatchContainerV2;

            if (source == null)
            {
                throw new ArgumentNullException(nameof(original));
            }

            var copy = new AzureQueueBatchContainerV2();

            SerializationContext.Current.RecordObject(original, copy);
            var token   = source.sequenceToken == null ? null : new EventSequenceTokenV2(source.sequenceToken.SequenceNumber, source.sequenceToken.EventIndex);
            var events  = source.events?.Select(SerializationManager.DeepCopyInner).ToList();
            var context = source.requestContext?.ToDictionary(kv => kv.Key, kv => SerializationManager.DeepCopyInner(kv.Value));

            copy.SetValues(source.StreamGuid, source.StreamNamespace, events, context, token);
            return(copy);
        }