Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / GenericQueueSurrogate.cs / 1305376 / GenericQueueSurrogate.cs
namespace System.Workflow.ComponentModel.Serialization { using System; using System.Xml; using System.Runtime.Serialization; using System.Reflection; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Collections; using System.Collections.Generic; #region GenericQueueSurrogate internal sealed class GenericQueueSurrogate : ISerializationSurrogate { internal GenericQueueSurrogate() { } void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context) { if (!obj.GetType().IsGenericType || obj.GetType().GetGenericTypeDefinition() != typeof(Queue<>)) throw new ArgumentException(SR.GetString(SR.Error_InvalidArgumentValue), "obj"); Type[] args = obj.GetType().GetGenericArguments(); if (args.Length != 1) throw new ArgumentException(SR.GetString(SR.Error_InvalidArgumentValue), "obj"); ArrayList items = new ArrayList(obj as ICollection); if (items.Count == 1) info.AddValue("item", items[0]); else info.AddValue("items", items.ToArray()); info.AddValue("itemType", args[0]); info.SetType(typeof(GenericQRef)); } object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) { return null; } #region GenericQRef [Serializable] private sealed class GenericQRef : IObjectReference, IDeserializationCallback { [OptionalField] private IList items = null; [OptionalField] private object item = null; private Type itemType = null; [NonSerialized] private object queue = null; Object IObjectReference.GetRealObject(StreamingContext context) { if (this.queue == null) { Type queueType = typeof(Queue).GetGenericTypeDefinition().MakeGenericType(itemType); this.queue = queueType.GetConstructor(Type.EmptyTypes).Invoke(null); } return this.queue; } void IDeserializationCallback.OnDeserialization(Object sender) { if (this.queue != null) { MethodInfo enqueueMethod = this.queue.GetType().GetMethod("Enqueue"); if (enqueueMethod == null) throw new NullReferenceException("enqueueMethod"); if (this.items != null) { for (int n = 0; n < items.Count; n++) enqueueMethod.Invoke(this.queue, new object[] { this.items[n] }); } else { enqueueMethod.Invoke(this.queue, new object[] { this.item }); } this.queue = null; } } } #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Workflow.ComponentModel.Serialization { using System; using System.Xml; using System.Runtime.Serialization; using System.Reflection; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Collections; using System.Collections.Generic; #region GenericQueueSurrogate internal sealed class GenericQueueSurrogate : ISerializationSurrogate { internal GenericQueueSurrogate() { } void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context) { if (!obj.GetType().IsGenericType || obj.GetType().GetGenericTypeDefinition() != typeof(Queue<>)) throw new ArgumentException(SR.GetString(SR.Error_InvalidArgumentValue), "obj"); Type[] args = obj.GetType().GetGenericArguments(); if (args.Length != 1) throw new ArgumentException(SR.GetString(SR.Error_InvalidArgumentValue), "obj"); ArrayList items = new ArrayList(obj as ICollection); if (items.Count == 1) info.AddValue("item", items[0]); else info.AddValue("items", items.ToArray()); info.AddValue("itemType", args[0]); info.SetType(typeof(GenericQRef)); } object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) { return null; } #region GenericQRef [Serializable] private sealed class GenericQRef : IObjectReference, IDeserializationCallback { [OptionalField] private IList items = null; [OptionalField] private object item = null; private Type itemType = null; [NonSerialized] private object queue = null; Object IObjectReference.GetRealObject(StreamingContext context) { if (this.queue == null) { Type queueType = typeof(Queue ).GetGenericTypeDefinition().MakeGenericType(itemType); this.queue = queueType.GetConstructor(Type.EmptyTypes).Invoke(null); } return this.queue; } void IDeserializationCallback.OnDeserialization(Object sender) { if (this.queue != null) { MethodInfo enqueueMethod = this.queue.GetType().GetMethod("Enqueue"); if (enqueueMethod == null) throw new NullReferenceException("enqueueMethod"); if (this.items != null) { for (int n = 0; n < items.Count; n++) enqueueMethod.Invoke(this.queue, new object[] { this.items[n] }); } else { enqueueMethod.Invoke(this.queue, new object[] { this.item }); } this.queue = null; } } } #endregion } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GridViewColumn.cs
- CurrentChangingEventManager.cs
- ISAPIRuntime.cs
- ExtendedPropertyDescriptor.cs
- GPRECT.cs
- WebPartDescription.cs
- EntityDataSourceViewSchema.cs
- StrokeCollection.cs
- TreeViewDesigner.cs
- BehaviorEditorPart.cs
- ServiceMetadataBehavior.cs
- AnnotationHelper.cs
- ReturnEventArgs.cs
- GroupedContextMenuStrip.cs
- SafeHandles.cs
- InstanceOwnerException.cs
- Int16Animation.cs
- AlternateView.cs
- PerformanceCounterCategory.cs
- _AcceptOverlappedAsyncResult.cs
- ThemeInfoAttribute.cs
- VariableBinder.cs
- ParallelRangeManager.cs
- PersistChildrenAttribute.cs
- NegatedCellConstant.cs
- StatusBarPanel.cs
- FormViewInsertEventArgs.cs
- XmlSchemaParticle.cs
- SerTrace.cs
- CanonicalFormWriter.cs
- RegexGroupCollection.cs
- AlternateViewCollection.cs
- ApplicationCommands.cs
- WebPartZoneDesigner.cs
- TwoPhaseCommit.cs
- OleDbEnumerator.cs
- DatePickerTextBox.cs
- DoubleMinMaxAggregationOperator.cs
- RoutedEventHandlerInfo.cs
- ChildrenQuery.cs
- MetadataArtifactLoaderResource.cs
- WebResourceUtil.cs
- ImageButton.cs
- FormClosingEvent.cs
- DataGridViewElement.cs
- WebBrowserEvent.cs
- ellipse.cs
- FormsAuthenticationConfiguration.cs
- DynamicDataRoute.cs
- XmlAutoDetectWriter.cs
- XmlUtf8RawTextWriter.cs
- LicenseException.cs
- TdsParameterSetter.cs
- DivideByZeroException.cs
- ToolStripContentPanel.cs
- PropertyInfoSet.cs
- SpanIndex.cs
- ReadOnlyHierarchicalDataSourceView.cs
- FileSecurity.cs
- RegisteredScript.cs
- BreadCrumbTextConverter.cs
- PauseStoryboard.cs
- DrawingContextDrawingContextWalker.cs
- WebPartAddingEventArgs.cs
- HostedTcpTransportManager.cs
- SafeArrayRankMismatchException.cs
- SqlDataSourceStatusEventArgs.cs
- ScriptModule.cs
- PromptBuilder.cs
- GradientBrush.cs
- ColumnResult.cs
- EntityConnection.cs
- QueryAccessibilityHelpEvent.cs
- Attachment.cs
- AssemblyResourceLoader.cs
- Emitter.cs
- IsolationInterop.cs
- ContextBase.cs
- ServiceModelPerformanceCounters.cs
- InstanceContext.cs
- _HelperAsyncResults.cs
- RelationshipNavigation.cs
- RegexBoyerMoore.cs
- UiaCoreApi.cs
- BitmapFrameDecode.cs
- Missing.cs
- WebCategoryAttribute.cs
- X509CertificateCollection.cs
- ComEventsSink.cs
- AspCompat.cs
- WebBrowserDocumentCompletedEventHandler.cs
- PriorityBinding.cs
- SharedStatics.cs
- ComponentChangingEvent.cs
- SymbolUsageManager.cs
- DataObject.cs
- OutputCacheProfileCollection.cs
- RectangleHotSpot.cs
- Comparer.cs
- QuaternionValueSerializer.cs