annotate Source/Mapping/MemberMappers/BinarySerialisationToBase64StringMapper.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Runtime.Serialization.Formatters.Binary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 namespace BLToolkit.Mapping.MemberMappers
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 public class BinarySerialisationToBase64StringMapper : MemberMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public override void SetValue(object o, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 if (value != null) this.MemberAccessor.SetValue(o, BinarydeSerialize(Convert.FromBase64String(value.ToString())));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public override object GetValue(object o)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 return Convert.ToBase64String(BinarySerialize(this.MemberAccessor.GetValue(o)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 static byte[] BinarySerialize(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 if (obj == null) return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 MemoryStream memoryStream = new MemoryStream();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 BinaryFormatter binaryFormatter = new BinaryFormatter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 binaryFormatter.Serialize(memoryStream, obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 memoryStream.Flush();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 memoryStream.Position = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 return memoryStream.ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 static object BinarydeSerialize(byte[] data)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 using (var stream = new MemoryStream(data))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 var formatter = new BinaryFormatter();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 stream.Seek(0, SeekOrigin.Begin);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 return formatter.Deserialize(stream);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }