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
- ParseElementCollection.cs
- XmlDesignerDataSourceView.cs
- DataGridPagerStyle.cs
- XamlTemplateSerializer.cs
- LineServicesRun.cs
- ProfileSection.cs
- DynamicMethod.cs
- DecoderNLS.cs
- ButtonColumn.cs
- XmlDeclaration.cs
- VerticalAlignConverter.cs
- Msec.cs
- EventLogPermissionAttribute.cs
- ServiceContractListItem.cs
- Filter.cs
- AuthorizationRule.cs
- ClientBuildManagerCallback.cs
- ConfigurationPermission.cs
- CacheHelper.cs
- PersonalizationEntry.cs
- LineGeometry.cs
- RuleSet.cs
- XmlDataSourceNodeDescriptor.cs
- ElapsedEventArgs.cs
- WebPartMenu.cs
- SettingsPropertyIsReadOnlyException.cs
- WebPartZoneBase.cs
- EntityDataSourceContextCreatedEventArgs.cs
- ProcessManager.cs
- UniqueIdentifierService.cs
- ImmutableCollection.cs
- XMLUtil.cs
- InkCanvasFeedbackAdorner.cs
- JournalEntry.cs
- ConnectionPoint.cs
- HandlerFactoryCache.cs
- QilStrConcatenator.cs
- ReadOnlyDataSource.cs
- EventDescriptor.cs
- BitmapEffectvisualstate.cs
- XslVisitor.cs
- StaticSiteMapProvider.cs
- TargetParameterCountException.cs
- GridEntry.cs
- DesignerActionGlyph.cs
- BitmapEffectvisualstate.cs
- CodeNamespaceCollection.cs
- Dictionary.cs
- InvokeMethod.cs
- CellLabel.cs
- BitConverter.cs
- TypeConverter.cs
- InplaceBitmapMetadataWriter.cs
- XPathSelectionIterator.cs
- HitTestParameters.cs
- QueryStatement.cs
- DelegatedStream.cs
- IssuanceTokenProviderState.cs
- XPathNodeHelper.cs
- DoubleAnimationUsingPath.cs
- CalendarData.cs
- CalendarTable.cs
- InternalTypeHelper.cs
- log.cs
- SqlConnectionString.cs
- SafeViewOfFileHandle.cs
- TrustManagerPromptUI.cs
- UserControl.cs
- fixedPageContentExtractor.cs
- MediaContext.cs
- DisplayInformation.cs
- MetadataImporterQuotas.cs
- AnnotationResourceChangedEventArgs.cs
- QueryOpcode.cs
- WebPartTracker.cs
- ProfileElement.cs
- PreProcessInputEventArgs.cs
- WaitHandleCannotBeOpenedException.cs
- basevalidator.cs
- StrokeNode.cs
- RoleProviderPrincipal.cs
- GridViewEditEventArgs.cs
- ConfigurationSchemaErrors.cs
- ByeOperationAsyncResult.cs
- XmlSignatureManifest.cs
- WsdlInspector.cs
- HyperLinkStyle.cs
- ItemContainerProviderWrapper.cs
- JavaScriptString.cs
- ReflectionPermission.cs
- InkCanvasInnerCanvas.cs
- filewebresponse.cs
- ObjectListTitleAttribute.cs
- ConfigurationManagerInternalFactory.cs
- InternalBufferOverflowException.cs
- InvariantComparer.cs
- EntityDataSourceWrapper.cs
- SafeNativeMemoryHandle.cs
- DataStreams.cs
- FixUpCollection.cs