/// <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); }
/// <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); }
/// <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); }