SimpleTypesSurrogate.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / SimpleTypesSurrogate.cs / 1305376 / SimpleTypesSurrogate.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 SimpleTypesSurrogate
 	//This class is currently used only for Guids. The size diff is 93 bytes per guid over binary formatter
	//Will add support for other types as well, eventually. 
	internal sealed class SimpleTypesSurrogate : ISerializationSurrogate
	{ 
 		enum TypeID : byte 
		{
 			Guid = 1, 
 			Null,
		}
 		void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context)
		{ 
			if (obj.GetType() == typeof(Guid))
			{ 
 				Guid guid = (Guid)obj; 
				info.AddValue("typeID", TypeID.Guid);
 				info.AddValue("bits", guid.ToByteArray()); 
 			}
		}
 		object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
		{ 
			TypeID typeID = (TypeID)info.GetValue("typeID", typeof(TypeID));
 
			if (typeID == TypeID.Guid) 
 				return new Guid(info.GetValue("bits", typeof(byte[])) as byte[]);
 
			return null;
 		}
 	}
	#endregion 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
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 SimpleTypesSurrogate
 	//This class is currently used only for Guids. The size diff is 93 bytes per guid over binary formatter
	//Will add support for other types as well, eventually. 
	internal sealed class SimpleTypesSurrogate : ISerializationSurrogate
	{ 
 		enum TypeID : byte 
		{
 			Guid = 1, 
 			Null,
		}
 		void ISerializationSurrogate.GetObjectData(object obj, SerializationInfo info, StreamingContext context)
		{ 
			if (obj.GetType() == typeof(Guid))
			{ 
 				Guid guid = (Guid)obj; 
				info.AddValue("typeID", TypeID.Guid);
 				info.AddValue("bits", guid.ToByteArray()); 
 			}
		}
 		object ISerializationSurrogate.SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
		{ 
			TypeID typeID = (TypeID)info.GetValue("typeID", typeof(TypeID));
 
			if (typeID == TypeID.Guid) 
 				return new Guid(info.GetValue("bits", typeof(byte[])) as byte[]);
 
			return null;
 		}
 	}
	#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