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
- HashCodeCombiner.cs
- SchemaImporterExtension.cs
- SafeRightsManagementPubHandle.cs
- PropertyRef.cs
- XmlSchemaSet.cs
- dbdatarecord.cs
- WebPartEditorOkVerb.cs
- AddressAlreadyInUseException.cs
- RubberbandSelector.cs
- WebSysDescriptionAttribute.cs
- MessageBox.cs
- JoinCqlBlock.cs
- RequestCacheManager.cs
- SettingsBindableAttribute.cs
- HandlerFactoryCache.cs
- PropertyTab.cs
- FileSystemInfo.cs
- XhtmlBasicObjectListAdapter.cs
- ResourcePermissionBase.cs
- Verify.cs
- Classification.cs
- VariableAction.cs
- BitmapEffectCollection.cs
- StateItem.cs
- EntityKey.cs
- XmlSerializerObjectSerializer.cs
- SortFieldComparer.cs
- UnitySerializationHolder.cs
- TransactionFilter.cs
- GridViewSortEventArgs.cs
- ImageAnimator.cs
- ISO2022Encoding.cs
- NativeWindow.cs
- FrugalMap.cs
- ObjectResult.cs
- ConfigXmlText.cs
- WebPartMinimizeVerb.cs
- VisualBrush.cs
- StringDictionaryCodeDomSerializer.cs
- EmbeddedMailObjectsCollection.cs
- ResourcePart.cs
- DataGridTextBox.cs
- CryptoApi.cs
- UInt32Storage.cs
- ErrorRuntimeConfig.cs
- SqlReferenceCollection.cs
- CursorInteropHelper.cs
- Timeline.cs
- LassoSelectionBehavior.cs
- AddressHeaderCollectionElement.cs
- RemotingException.cs
- StylusDownEventArgs.cs
- ShaderRenderModeValidation.cs
- LinqDataSourceEditData.cs
- OverflowException.cs
- XmlQualifiedNameTest.cs
- FamilyMap.cs
- FamilyCollection.cs
- XsltCompileContext.cs
- CookieProtection.cs
- DeadCharTextComposition.cs
- PropertyChangedEventManager.cs
- ComponentDesigner.cs
- AsyncResult.cs
- GregorianCalendar.cs
- FixedSOMTableRow.cs
- ReturnType.cs
- UrlAuthFailedErrorFormatter.cs
- XPathNodeList.cs
- QuaternionValueSerializer.cs
- AssemblyBuilder.cs
- Solver.cs
- MembershipSection.cs
- oledbmetadatacolumnnames.cs
- TreeChangeInfo.cs
- GenericEnumerator.cs
- Comparer.cs
- CodeSnippetTypeMember.cs
- GreaterThan.cs
- SuppressMessageAttribute.cs
- Viewport3DAutomationPeer.cs
- HandlerMappingMemo.cs
- DiscoveryMessageSequence.cs
- HandlerElementCollection.cs
- RefType.cs
- DataSetFieldSchema.cs
- ReliableDuplexSessionChannel.cs
- IIS7UserPrincipal.cs
- WebPartTracker.cs
- Transform3D.cs
- UICuesEvent.cs
- TcpHostedTransportConfiguration.cs
- ActivationArguments.cs
- ContextMenuStrip.cs
- SchemaConstraints.cs
- Properties.cs
- EncodingNLS.cs
- StreamUpdate.cs
- CompilationUnit.cs
- BindingMAnagerBase.cs