diff Source/Mapping/MemberMappers/BinarySerialisationToBase64StringMapper.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Mapping/MemberMappers/BinarySerialisationToBase64StringMapper.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,40 @@
+using System;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace BLToolkit.Mapping.MemberMappers
+{
+	public class BinarySerialisationToBase64StringMapper : MemberMapper
+	{
+		public override void SetValue(object o, object value)
+		{
+			if (value != null) this.MemberAccessor.SetValue(o, BinarydeSerialize(Convert.FromBase64String(value.ToString())));                                
+		}
+
+		public override object GetValue(object o)
+		{
+			return Convert.ToBase64String(BinarySerialize(this.MemberAccessor.GetValue(o)));            
+		}
+
+		static byte[] BinarySerialize(object obj)
+		{
+			if (obj == null) return null;
+			MemoryStream memoryStream = new MemoryStream();
+			BinaryFormatter binaryFormatter = new BinaryFormatter();
+			binaryFormatter.Serialize(memoryStream, obj);
+			memoryStream.Flush();
+			memoryStream.Position = 0;
+			return memoryStream.ToArray();
+		}
+
+		static object BinarydeSerialize(byte[] data)
+		{
+			using (var stream = new MemoryStream(data))
+			{
+				var formatter = new BinaryFormatter();
+				stream.Seek(0, SeekOrigin.Begin);
+				return formatter.Deserialize(stream);
+			}
+		}
+	}
+}