annotate Source/Mapping/MemberMappers/XMLSerialisationMapper.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
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.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Xml.Serialization;
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 XMLSerialisationMapper : 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, this.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.XmlSerialize(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 string XmlSerialize(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 XmlSerializer serializer = new XmlSerializer(this.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 MemoryStream ms = new MemoryStream();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 XmlWriterSettings settings = new XmlWriterSettings();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 settings.OmitXmlDeclaration = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 settings.Indent = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 XmlWriter writer = XmlWriter.Create(ms, settings);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 namespaces.Add(string.Empty, string.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 serializer.Serialize(writer, obj, namespaces);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 StreamReader r = new StreamReader(ms);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 r.BaseStream.Seek(0, SeekOrigin.Begin);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 return r.ReadToEnd();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 object Deserialize(string txt)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 object retVal = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 if (string.IsNullOrEmpty(txt)) return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 XmlSerializer ser = new XmlSerializer(this.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 StringReader stringReader = new StringReader(txt);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 XmlTextReader xmlReader = new XmlTextReader(stringReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 retVal = ser.Deserialize(xmlReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 xmlReader.Close();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 stringReader.Close();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 catch (Exception)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 return retVal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }