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
- ChangeProcessor.cs
- LongSumAggregationOperator.cs
- UnsafeNativeMethods.cs
- MsmqTransportBindingElement.cs
- ListViewSortEventArgs.cs
- Empty.cs
- XmlSchema.cs
- TraceContext.cs
- AnonymousIdentificationModule.cs
- WindowsAuthenticationEventArgs.cs
- FileVersion.cs
- XPSSignatureDefinition.cs
- EncoderParameter.cs
- SvcMapFileSerializer.cs
- MetadataCollection.cs
- SqlMethodAttribute.cs
- StringAnimationBase.cs
- DataPointer.cs
- WCFServiceClientProxyGenerator.cs
- StackSpiller.cs
- SerializableReadOnlyDictionary.cs
- MarkupProperty.cs
- ControlCollection.cs
- ByteStreamGeometryContext.cs
- HttpHandler.cs
- RoleManagerEventArgs.cs
- BindingValueChangedEventArgs.cs
- NamespaceQuery.cs
- SchemaExporter.cs
- PermissionSet.cs
- FileSystemInfo.cs
- OpenTypeLayout.cs
- _BufferOffsetSize.cs
- SignatureDescription.cs
- SourceLocationProvider.cs
- MutexSecurity.cs
- ViewBox.cs
- NestedContainer.cs
- BitmapEffectState.cs
- DispatcherObject.cs
- XPathException.cs
- Exceptions.cs
- ViewDesigner.cs
- HistoryEventArgs.cs
- MimeTypePropertyAttribute.cs
- SizeAnimationClockResource.cs
- KeyboardNavigation.cs
- Vector3DCollectionValueSerializer.cs
- WebControlAdapter.cs
- SingleAnimation.cs
- OperationFormatStyle.cs
- ContentPathSegment.cs
- Expression.cs
- ValidationRule.cs
- SqlAliasesReferenced.cs
- HtmlTableCell.cs
- SecurityPolicySection.cs
- ObjectStateFormatter.cs
- DataGridCaption.cs
- BrowsableAttribute.cs
- DataListItemCollection.cs
- CatalogPartChrome.cs
- StyleSheet.cs
- ActivityExecutorDelegateInfo.cs
- TcpConnectionPoolSettingsElement.cs
- XPathDocumentBuilder.cs
- NullableConverter.cs
- Attributes.cs
- ElementNotAvailableException.cs
- LookupTables.cs
- RangeBase.cs
- codemethodreferenceexpression.cs
- DocumentGrid.cs
- X509ChainPolicy.cs
- DynamicDocumentPaginator.cs
- TreeView.cs
- HttpFileCollection.cs
- MatrixAnimationUsingPath.cs
- PenThreadWorker.cs
- BufferedGraphicsContext.cs
- SafeArrayTypeMismatchException.cs
- SamlAssertion.cs
- BaseParser.cs
- RSAPKCS1SignatureDeformatter.cs
- XamlFilter.cs
- ObjectContextServiceProvider.cs
- Descriptor.cs
- TreeNodeCollectionEditor.cs
- QueryResult.cs
- WebPartAddingEventArgs.cs
- MembershipUser.cs
- Rights.cs
- SplitterCancelEvent.cs
- ReflectTypeDescriptionProvider.cs
- DeploymentSection.cs
- ProcessingInstructionAction.cs
- SettingsAttributes.cs
- DataBindingExpressionBuilder.cs
- WebPartCatalogCloseVerb.cs
- PasswordRecovery.cs