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
- CategoryGridEntry.cs
- ViewStateModeByIdAttribute.cs
- ContainerFilterService.cs
- CriticalHandle.cs
- CompensationHandlingFilter.cs
- UrlAuthorizationModule.cs
- AssemblyAttributesGoHere.cs
- Container.cs
- DuplexChannelFactory.cs
- XD.cs
- CompilerResults.cs
- HelpProvider.cs
- XmlSchemaProviderAttribute.cs
- HtmlInputSubmit.cs
- NameHandler.cs
- RotateTransform3D.cs
- RegexWorker.cs
- AlignmentXValidation.cs
- DetailsViewDeleteEventArgs.cs
- MsmqBindingElementBase.cs
- ClientRuntimeConfig.cs
- ReadOnlyDataSource.cs
- PasswordBoxAutomationPeer.cs
- FormCollection.cs
- SecurityElement.cs
- SqlBulkCopyColumnMappingCollection.cs
- Int32CAMarshaler.cs
- AuthenticationService.cs
- DesignerAttribute.cs
- ReliableRequestSessionChannel.cs
- StringFreezingAttribute.cs
- DBConcurrencyException.cs
- ApplicationInterop.cs
- BrushMappingModeValidation.cs
- NeutralResourcesLanguageAttribute.cs
- KeyInfo.cs
- ObjectToken.cs
- DefaultTextStoreTextComposition.cs
- BufferedStream.cs
- DecoderBestFitFallback.cs
- Duration.cs
- ProtocolElement.cs
- EntityCommandCompilationException.cs
- PropertyGroupDescription.cs
- CrossAppDomainChannel.cs
- ByteStream.cs
- TypeDelegator.cs
- HTMLTextWriter.cs
- HashCodeCombiner.cs
- DataTrigger.cs
- LambdaCompiler.ControlFlow.cs
- ParentQuery.cs
- WindowsMenu.cs
- ToolboxBitmapAttribute.cs
- LongTypeConverter.cs
- BufferModeSettings.cs
- PrintDocument.cs
- TreeNodeBinding.cs
- _emptywebproxy.cs
- SystemIPGlobalStatistics.cs
- TableLayoutSettings.cs
- NonBatchDirectoryCompiler.cs
- Help.cs
- XmlWriterDelegator.cs
- XmlCDATASection.cs
- AdPostCacheSubstitution.cs
- EnterpriseServicesHelper.cs
- XXXInfos.cs
- TargetException.cs
- AutomationPropertyInfo.cs
- TypedAsyncResult.cs
- MemoryStream.cs
- StringAnimationBase.cs
- ResolvedKeyFrameEntry.cs
- ApplicationSecurityManager.cs
- ServicePointManager.cs
- ReflectEventDescriptor.cs
- HttpModuleCollection.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- ACL.cs
- Graph.cs
- XmlSignificantWhitespace.cs
- XmlNullResolver.cs
- StylusPointPropertyInfo.cs
- VoiceInfo.cs
- ToolStripItemClickedEventArgs.cs
- SrgsToken.cs
- BrowserCapabilitiesFactoryBase.cs
- _CookieModule.cs
- ApplicationManager.cs
- Roles.cs
- InterleavedZipPartStream.cs
- Calendar.cs
- ELinqQueryState.cs
- Cursors.cs
- DataGridViewCellLinkedList.cs
- GeometryGroup.cs
- PostBackOptions.cs
- ColorBlend.cs
- NameSpaceEvent.cs