Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EncodingInfo.cs
- TraceHwndHost.cs
- invalidudtexception.cs
- CheckableControlBaseAdapter.cs
- DoubleConverter.cs
- DocumentViewerHelper.cs
- SmtpMail.cs
- ObjectAnimationUsingKeyFrames.cs
- DataGridToolTip.cs
- ConfigXmlComment.cs
- PolyBezierSegment.cs
- ComponentRenameEvent.cs
- DataErrorValidationRule.cs
- WorkflowServiceInstance.cs
- ListenerHandler.cs
- XmlReader.cs
- CacheRequest.cs
- datacache.cs
- Regex.cs
- Clipboard.cs
- Header.cs
- Padding.cs
- FragmentQueryProcessor.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- BehaviorEditorPart.cs
- IndexedWhereQueryOperator.cs
- Figure.cs
- Stylesheet.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- QueryConverter.cs
- TreeNodeClickEventArgs.cs
- DataConnectionHelper.cs
- XmlSerializer.cs
- MenuStrip.cs
- DataGridViewCellCancelEventArgs.cs
- SelectionListComponentEditor.cs
- OperandQuery.cs
- ActivityAction.cs
- CheckBox.cs
- InsufficientMemoryException.cs
- SymbolEqualComparer.cs
- versioninfo.cs
- HttpProfileBase.cs
- hresults.cs
- XomlCompilerHelpers.cs
- sqlpipe.cs
- AccessDataSourceView.cs
- LayoutUtils.cs
- InkCanvasAutomationPeer.cs
- TemplateComponentConnector.cs
- LineMetrics.cs
- HttpRequest.cs
- WebBrowserNavigatedEventHandler.cs
- IERequestCache.cs
- WebPartVerb.cs
- DateTime.cs
- CqlGenerator.cs
- InputScopeManager.cs
- RulePatternOps.cs
- ClientOptions.cs
- Soap12ServerProtocol.cs
- RoutedPropertyChangedEventArgs.cs
- ComplusEndpointConfigContainer.cs
- ArrayMergeHelper.cs
- BooleanAnimationUsingKeyFrames.cs
- SafeFileMappingHandle.cs
- Selection.cs
- GroupedContextMenuStrip.cs
- DataTableNameHandler.cs
- UndoManager.cs
- FileSystemEventArgs.cs
- BitmapDownload.cs
- ProtectedProviderSettings.cs
- HyperLinkColumn.cs
- RuleRef.cs
- GridViewAutomationPeer.cs
- IconBitmapDecoder.cs
- BCLDebug.cs
- LOSFormatter.cs
- SimpleFileLog.cs
- SessionViewState.cs
- NullableConverter.cs
- LiteralControl.cs
- HeaderLabel.cs
- HttpHeaderCollection.cs
- CmsUtils.cs
- MessageSecurityOverMsmqElement.cs
- ISFTagAndGuidCache.cs
- TypeSystemProvider.cs
- SerializationSectionGroup.cs
- PropertyEntry.cs
- Margins.cs
- ImageDesigner.cs
- IntellisenseTextBox.designer.cs
- RequestResizeEvent.cs
- HtmlControlAdapter.cs
- StrokeNodeOperations.cs
- WebPartMenuStyle.cs
- httpapplicationstate.cs
- StreamGeometryContext.cs