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

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System;
2 using System.IO;
3 using System.Xml;
4 using System.Xml.Serialization;
5
6 namespace BLToolkit.Mapping.MemberMappers
7 {
8 public class XMLSerialisationMapper : MemberMapper
9 {
10 public override void SetValue(object o, object value)
11 {
12 if (value != null) this.MemberAccessor.SetValue(o, this.Deserialize(value.ToString()));
13 }
14
15 public override object GetValue(object o)
16 {
17 return this.XmlSerialize(this.MemberAccessor.GetValue(o));
18 }
19
20 string XmlSerialize(object obj)
21 {
22 if (obj == null) return null;
23 XmlSerializer serializer = new XmlSerializer(this.Type);
24 MemoryStream ms = new MemoryStream();
25 XmlWriterSettings settings = new XmlWriterSettings();
26 settings.OmitXmlDeclaration = true;
27 settings.Indent = true;
28 XmlWriter writer = XmlWriter.Create(ms, settings);
29 XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
30 namespaces.Add(string.Empty, string.Empty);
31 serializer.Serialize(writer, obj, namespaces);
32 StreamReader r = new StreamReader(ms);
33 r.BaseStream.Seek(0, SeekOrigin.Begin);
34
35 return r.ReadToEnd();
36 }
37
38 object Deserialize(string txt)
39 {
40 object retVal = null;
41 if (string.IsNullOrEmpty(txt)) return null;
42
43 try
44 {
45 XmlSerializer ser = new XmlSerializer(this.Type);
46 StringReader stringReader = new StringReader(txt);
47 XmlTextReader xmlReader = new XmlTextReader(stringReader);
48 retVal = ser.Deserialize(xmlReader);
49 xmlReader.Close();
50 stringReader.Close();
51 }
52 catch (Exception)
53 {
54 }
55 return retVal;
56 }
57 }
58 }