0
|
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 }
|