Mercurial > pub > bltoolkit
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); + } + } + } +}