annotate Source/Mapping/MemberMappers/JSONSerialisationMapper.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.Json;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 namespace BLToolkit.Mapping.MemberMappers
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 public class JSONSerialisationMapper : MemberMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 public override void SetValue(object o, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 if (value != null) this.MemberAccessor.SetValue(o, Deserialize(value.ToString()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public override object GetValue(object o)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 return this.serialize(this.MemberAccessor.GetValue(o));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 private string serialize(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 if (obj == null) return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 DataContractJsonSerializer ser = new DataContractJsonSerializer(this.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 MemoryStream ms = new MemoryStream();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 ser.WriteObject(ms, obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 string jsonString = Encoding.UTF8.GetString(ms.ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 ms.Close();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 return jsonString;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 object Deserialize(string txt)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 object retVal = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 if (string.IsNullOrEmpty(txt)) return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 DataContractJsonSerializer ser = new DataContractJsonSerializer(this.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(txt));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 retVal = ser.ReadObject(ms);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 catch (Exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 return retVal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 }