Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / ListSurrogate.cs / 1305376 / ListSurrogate.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 ListSurrogate
internal sealed class ListSurrogate : ISerializationSurrogate
{
internal ListSurrogate() { }
void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context)
{
if (!obj.GetType().IsGenericType || obj.GetType().GetGenericTypeDefinition() != typeof(List<>))
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 IList);
if (items.Count == 1)
info.AddValue("item", items[0]);
else
info.AddValue("items", items.ToArray());
info.AddValue("itemType", args[0]);
info.SetType(typeof(ListRef));
}
object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
{
return null;
}
#region ListRef
[Serializable]
private sealed class ListRef : IObjectReference, IDeserializationCallback
{
[OptionalField]
private IList items = null;
[OptionalField]
private object item = null;
private Type itemType = null;
[NonSerialized]
private object list = null;
Object IObjectReference.GetRealObject(StreamingContext context)
{
if (this.list == null)
{
Type listType = typeof(List).GetGenericTypeDefinition().MakeGenericType(itemType);
this.list = listType.GetConstructor(Type.EmptyTypes).Invoke(null);
}
return this.list;
}
void IDeserializationCallback.OnDeserialization(Object sender)
{
if (this.list != null)
{
MethodInfo addMethod = this.list.GetType().GetMethod("Add");
if (addMethod == null)
throw new NullReferenceException("addMethod");
if (this.items != null)
{
for (int n = 0; n < items.Count; n++)
addMethod.Invoke(this.list, new object[] { this.items[n] });
}
else
{
addMethod.Invoke(this.list, new object[] { this.item });
}
this.list = 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
- WindowsFormsHostAutomationPeer.cs
- PartialCachingControl.cs
- Listbox.cs
- ToolStripOverflowButton.cs
- PageCatalogPart.cs
- WinEventQueueItem.cs
- CryptoConfig.cs
- Sorting.cs
- InvalidPipelineStoreException.cs
- SaveFileDialogDesigner.cs
- OraclePermissionAttribute.cs
- DropDownList.cs
- SqlGatherConsumedAliases.cs
- ConfigurationException.cs
- ZipIOLocalFileHeader.cs
- XmlTypeAttribute.cs
- CTreeGenerator.cs
- TCPListener.cs
- HorizontalAlignConverter.cs
- ClientConfigPaths.cs
- ExeContext.cs
- SqlAliasesReferenced.cs
- HeaderedContentControl.cs
- SQLBytesStorage.cs
- HttpServerVarsCollection.cs
- UntypedNullExpression.cs
- ExpressionLink.cs
- WebPartTransformerAttribute.cs
- Separator.cs
- XmlValidatingReaderImpl.cs
- UrlMappingsModule.cs
- UnknownWrapper.cs
- StaticExtension.cs
- ListBoxItemWrapperAutomationPeer.cs
- LongValidatorAttribute.cs
- __Filters.cs
- PriorityQueue.cs
- CryptoApi.cs
- XmlKeywords.cs
- ColorBlend.cs
- EdgeModeValidation.cs
- PrintSystemException.cs
- LineSegment.cs
- SelfIssuedAuthRSACryptoProvider.cs
- SynchronizedRandom.cs
- EnvironmentPermission.cs
- System.Data.OracleClient_BID.cs
- WebSysDefaultValueAttribute.cs
- TextUtf8RawTextWriter.cs
- serverconfig.cs
- MethodCallTranslator.cs
- UnicodeEncoding.cs
- RegexStringValidatorAttribute.cs
- ResetableIterator.cs
- DivideByZeroException.cs
- ClientTargetCollection.cs
- TextBox.cs
- WindowInteractionStateTracker.cs
- BaseResourcesBuildProvider.cs
- XsltCompileContext.cs
- AdjustableArrowCap.cs
- EnvelopedPkcs7.cs
- ConfigurationManagerHelper.cs
- SparseMemoryStream.cs
- SemanticAnalyzer.cs
- CommandValueSerializer.cs
- PublisherMembershipCondition.cs
- ListViewAutomationPeer.cs
- Source.cs
- DataObjectPastingEventArgs.cs
- CfgParser.cs
- CompilerGeneratedAttribute.cs
- InfoCardKeyedHashAlgorithm.cs
- PixelShader.cs
- ObjectDisposedException.cs
- InvalidComObjectException.cs
- SemanticResultValue.cs
- TextAnchor.cs
- AttributeCollection.cs
- Filter.cs
- FtpWebResponse.cs
- XmlSignatureManifest.cs
- MasterPageBuildProvider.cs
- SafeBitVector32.cs
- CellIdBoolean.cs
- DefaultTypeArgumentAttribute.cs
- ConfigsHelper.cs
- BaseParagraph.cs
- CopyOnWriteList.cs
- RewritingProcessor.cs
- EntityDataSourceConfigureObjectContext.cs
- WebBrowserProgressChangedEventHandler.cs
- KeyInterop.cs
- VariantWrapper.cs
- FrameworkElementFactory.cs
- DrawItemEvent.cs
- QuaternionKeyFrameCollection.cs
- HttpRuntime.cs
- SkipStoryboardToFill.cs
- CallbackTimeoutsElement.cs