DependencyStoreSurrogate.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / DependencyStoreSurrogate.cs / 1305376 / DependencyStoreSurrogate.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 DependencyStoreSurrogate
 	internal sealed class DependencyStoreSurrogate : ISerializationSurrogate
	{ 
		internal DependencyStoreSurrogate() { }
		void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context) 
 		{ 
			IDictionary store = obj as IDictionary;
 			if (store == null) 
 				throw new ArgumentException("obj");

			ArrayList properties = new ArrayList();
 			ArrayList values = new ArrayList(); 

            foreach (KeyValuePair kvp in store) 
            { 
				if (!kvp.Key.DefaultMetadata.IsNonSerialized)
				{ 
					if (kvp.Key.IsKnown)
 						properties.Add(kvp.Key.KnownIndex);
					else
 						properties.Add(kvp.Key); 
 					values.Add(kvp.Value);
				} 
 			} 
			
			info.AddValue("keys", properties.ToArray()); 
			info.AddValue("values", values.ToArray());

 			info.SetType(typeof(DependencyStoreRef));
		} 
 		object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
 		{ 
			return null; 
 		}
 
		#region DependencyStoreRef
		[Serializable]
		private sealed class DependencyStoreRef : IObjectReference, IDeserializationCallback
 		{ 
			private IList keys = null;
 			private IList values = null; 
 
 			[NonSerialized]
			private IDictionary store = null; 

 			Object IObjectReference.GetRealObject(StreamingContext context)
			{
				if (this.store == null) 
					this.store = new Dictionary();
 
 				return this.store; 
			}
 			void IDeserializationCallback.OnDeserialization(Object sender) 
 			{
				if (this.store != null)
 				{
					for (int index = 0; index < this.keys.Count; index++) 
					{
						DependencyProperty dp = this.keys[index] as DependencyProperty; 
 						if (dp == null) 
							dp = DependencyProperty.FromKnown((byte)this.keys[index]);
 						this.store.Add(dp, this.values[index]); 
 					}
				}
 				this.store = null;
			} 
		}
		#endregion 
 	} 
	#endregion
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK