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
- Form.cs
- HtmlObjectListAdapter.cs
- SQLBytesStorage.cs
- ISCIIEncoding.cs
- CloudCollection.cs
- SessionEndedEventArgs.cs
- SafePEFileHandle.cs
- TextEditorSelection.cs
- CustomErrorsSection.cs
- XMLUtil.cs
- WebBrowserContainer.cs
- ConcatQueryOperator.cs
- ButtonField.cs
- ListenerPerfCounters.cs
- EncoderNLS.cs
- VisualStyleInformation.cs
- SortQuery.cs
- TransportBindingElement.cs
- Vector.cs
- ImageIndexConverter.cs
- ImmutableCollection.cs
- ListViewAutomationPeer.cs
- OLEDB_Util.cs
- CollectionContainer.cs
- IndexedString.cs
- CFGGrammar.cs
- SystemColors.cs
- DataGridViewRowConverter.cs
- HttpModulesSection.cs
- BindingUtils.cs
- SafeProcessHandle.cs
- XPathItem.cs
- ConfigurationProperty.cs
- FrameworkElement.cs
- RegexBoyerMoore.cs
- ComponentResourceKey.cs
- IPEndPoint.cs
- CatalogZoneDesigner.cs
- SessionSwitchEventArgs.cs
- KeyFrames.cs
- XmlStringTable.cs
- ColumnWidthChangedEvent.cs
- ResourcesChangeInfo.cs
- ParallelRangeManager.cs
- ValidationResult.cs
- QilDataSource.cs
- SiteMapDataSource.cs
- LambdaCompiler.Address.cs
- ThaiBuddhistCalendar.cs
- EncodingInfo.cs
- CookieParameter.cs
- TickBar.cs
- EmptyEnumerator.cs
- SoapInteropTypes.cs
- ExceptionUtil.cs
- VerificationException.cs
- TreeWalker.cs
- DataRelationPropertyDescriptor.cs
- DependencyProperty.cs
- AnnotationService.cs
- BulletedListEventArgs.cs
- XmlAttributeOverrides.cs
- LogExtentCollection.cs
- SafeRegistryKey.cs
- KeyedCollection.cs
- FontUnit.cs
- HashFinalRequest.cs
- DataGridViewCellFormattingEventArgs.cs
- XmlSchemaImport.cs
- TextLine.cs
- DataSourceCacheDurationConverter.cs
- CustomAttributeBuilder.cs
- Config.cs
- HtmlTableRow.cs
- NavigationExpr.cs
- Keywords.cs
- InsufficientMemoryException.cs
- UnauthorizedWebPart.cs
- BitmapCodecInfo.cs
- HttpModule.cs
- XmlCharCheckingWriter.cs
- SiteMapPathDesigner.cs
- EncoderParameters.cs
- Set.cs
- BooleanStorage.cs
- SQLResource.cs
- Brush.cs
- SslStreamSecurityUpgradeProvider.cs
- String.cs
- IncrementalHitTester.cs
- _SpnDictionary.cs
- TraceSwitch.cs
- PasswordBoxAutomationPeer.cs
- ChangesetResponse.cs
- PerfProviderCollection.cs
- Int32CollectionConverter.cs
- AsynchronousChannel.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ServiceHttpModule.cs
- ArglessEventHandlerProxy.cs