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
- _Win32.cs
- QueueNameHelper.cs
- NumberFormatter.cs
- SqlDataSourceSelectingEventArgs.cs
- ListManagerBindingsCollection.cs
- DesignerVerbToolStripMenuItem.cs
- HttpRequest.cs
- DetailsViewRowCollection.cs
- Point3DCollection.cs
- querybuilder.cs
- CultureInfo.cs
- SQLMembershipProvider.cs
- _BaseOverlappedAsyncResult.cs
- Mapping.cs
- XmlTextReaderImplHelpers.cs
- XmlParser.cs
- GraphicsContainer.cs
- DrawingVisualDrawingContext.cs
- TypeConverterHelper.cs
- Misc.cs
- OdbcReferenceCollection.cs
- unsafeIndexingFilterStream.cs
- SiblingIterators.cs
- MailHeaderInfo.cs
- TimelineGroup.cs
- DesignerDataSchemaClass.cs
- PageAdapter.cs
- DocumentReference.cs
- BasicCellRelation.cs
- CodeCastExpression.cs
- DBCommandBuilder.cs
- MatrixTransform3D.cs
- CharStorage.cs
- ValidationResult.cs
- SecureEnvironment.cs
- SimplePropertyEntry.cs
- GenericIdentity.cs
- KeyboardEventArgs.cs
- BulletedListEventArgs.cs
- PipelineModuleStepContainer.cs
- SqlDataSourceQueryEditorForm.cs
- TrueReadOnlyCollection.cs
- UmAlQuraCalendar.cs
- WasEndpointConfigContainer.cs
- SupportingTokenProviderSpecification.cs
- Privilege.cs
- HostUtils.cs
- _IPv6Address.cs
- RootProfilePropertySettingsCollection.cs
- TypeBuilder.cs
- PolyBezierSegment.cs
- SessionStateUtil.cs
- ServicePrincipalNameElement.cs
- MenuAdapter.cs
- SecurityListenerSettingsLifetimeManager.cs
- HtmlShim.cs
- InputScopeConverter.cs
- OdbcException.cs
- DbBuffer.cs
- MessageDroppedTraceRecord.cs
- DBBindings.cs
- AsymmetricKeyExchangeDeformatter.cs
- TextPenaltyModule.cs
- ApplicationSettingsBase.cs
- WebWorkflowRole.cs
- SiteIdentityPermission.cs
- WebDisplayNameAttribute.cs
- FixedPageStructure.cs
- ConfigUtil.cs
- LOSFormatter.cs
- ReaderOutput.cs
- PathSegmentCollection.cs
- InputLanguageEventArgs.cs
- XmlILStorageConverter.cs
- DataGridViewImageCell.cs
- DataGridCellClipboardEventArgs.cs
- Transform3D.cs
- LicenseContext.cs
- EventArgs.cs
- WindowsGraphics2.cs
- sitestring.cs
- SystemInformation.cs
- ActivityExecutorOperation.cs
- SessionParameter.cs
- SqlConnection.cs
- NetworkStream.cs
- AttachInfo.cs
- WindowsRegion.cs
- KnownBoxes.cs
- QueryStringParameter.cs
- OperandQuery.cs
- Crc32.cs
- WindowsRichEditRange.cs
- ButtonRenderer.cs
- NTAccount.cs
- OperatingSystem.cs
- LogicalTreeHelper.cs
- PropertyMetadata.cs
- SplitterPanel.cs
- ObjectAssociationEndMapping.cs