comparison Implab/Xml/SerializationHelpers.cs @ 278:6691aff01de1 v3

Implab: added XmlDefaultSeializer (SerializersPool is now obsolete) Implab.ServiceHost: rewritten TypeReference (added support for nested types), stable API
author cin
date Thu, 03 May 2018 09:59:44 +0300
parents 3a6e18c432be
children
comparison
equal deleted inserted replaced
277:963b17c275be 278:6691aff01de1
10 using System.Xml.Serialization; 10 using System.Xml.Serialization;
11 11
12 namespace Implab.Xml { 12 namespace Implab.Xml {
13 public static class SerializationHelpers { 13 public static class SerializationHelpers {
14 public static string SerializeAsString<T>(T obj) { 14 public static string SerializeAsString<T>(T obj) {
15 return SerializersPool<T>.Instance.SerializeAsString(obj); 15 return XmlDefaultSerializer<T>.Instance.SerializeAsString(obj);
16 } 16 }
17 17
18 public static void Serialize<T>(XmlWriter writer, T obj) { 18 public static void Serialize<T>(XmlWriter writer, T obj) {
19 SerializersPool<T>.Instance.Serialize(writer, obj); 19 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj);
20 } 20 }
21 21
22 public static XmlDocument SerializeAsXmlDocument<T>(T obj) { 22 public static XmlDocument SerializeAsXmlDocument<T>(T obj) {
23 var doc = new XmlDocument(); 23 var doc = new XmlDocument();
24 using (var writer = doc.CreateNavigator().AppendChild()) { 24 using (var writer = doc.CreateNavigator().AppendChild()) {
25 SerializersPool<T>.Instance.Serialize(writer, obj); 25 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj);
26 } 26 }
27 return doc; 27 return doc;
28 } 28 }
29 29
30 public static XDocument SerializeAsXDocument<T>(T obj) { 30 public static XDocument SerializeAsXDocument<T>(T obj) {
31 var doc = new XDocument(); 31 var doc = new XDocument();
32 using (var writer = doc.CreateWriter()) { 32 using (var writer = doc.CreateWriter()) {
33 SerializersPool<T>.Instance.Serialize(writer, obj); 33 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj);
34 } 34 }
35 return doc; 35 return doc;
36 } 36 }
37 37
38 public static void SerializeToFile<T>(string file, T obj) { 38 public static void SerializeToFile<T>(string file, T obj) {
39 using (var writer = File.CreateText(file)) 39 XmlDefaultSerializer<T>.Instance.SerializeToFile(obj, file);
40 SerializersPool<T>.Instance.Serialize(writer, obj);
41 } 40 }
42 41
43 public static void SerializeToElementChild<T>(XmlElement element, T obj) { 42 public static void SerializeToElementChild<T>(XmlElement element, T obj) {
44 using(var writer = element.CreateNavigator().AppendChild()) 43 XmlDefaultSerializer<T>.Instance.Serialize(obj, element);
45 SerializersPool<T>.Instance.Serialize(writer, obj);
46 } 44 }
47 45
48 public static T Deserialize<T>(XmlReader reader) { 46 public static T Deserialize<T>(XmlReader reader) {
49 return SerializersPool<T>.Instance.Deserialize(reader); 47 return (T)XmlDefaultSerializer<T>.Instance.Deserialize(reader);
50 } 48 }
51 49
52 public static T DeserializeFromFile<T>(string file) { 50 public static T DeserializeFromFile<T>(string file) {
53 using(var reader = XmlReader.Create(File.OpenText(file))) 51 return (T)XmlDefaultSerializer<T>.Instance.DeserializeFromFile(file);
54 return Deserialize<T>(reader);
55 } 52 }
56 53
57 public static T DeserializeFromString<T>(string data) { 54 public static T DeserializeFromString<T>(string data) {
58 return SerializersPool<T>.Instance.DeserializeFromString(data); 55 return (T)XmlDefaultSerializer<T>.Instance.DeserializeFromString(data);
59 } 56 }
60 57
61 public static T DeserializeFromXmlNode<T>(XmlNode node) { 58 public static T DeserializeFromXmlNode<T>(XmlNode node) {
62 Safe.ArgumentNotNull(node, nameof(node)); 59 Safe.ArgumentNotNull(node, nameof(node));
63 using (var reader = node.CreateNavigator().ReadSubtree()) 60 using (var reader = node.CreateNavigator().ReadSubtree())
64 return SerializersPool<T>.Instance.Deserialize(reader); 61 return (T)XmlDefaultSerializer<T>.Instance.Deserialize(reader);
65 } 62 }
66 63
67 public static T DeserializeJson<T>(TextReader textReader) { 64 public static T DeserializeJson<T>(TextReader textReader) {
68 var options = new JsonXmlReaderOptions { 65 var options = new JsonXmlReaderOptions {
69 NamespaceUri = typeof(T).GetCustomAttribute<XmlRootAttribute>()?.Namespace, 66 NamespaceUri = typeof(T).GetCustomAttribute<XmlRootAttribute>()?.Namespace,
70 RootName = typeof(T).Name, 67 RootName = typeof(T).Name,
71 FlattenArrays = true 68 FlattenArrays = true
72 }; 69 };
73 70
74 using(var reader = JsonXmlReader.CreateJsonXmlReader(textReader, options)) 71 using (var reader = JsonXmlReader.CreateJsonXmlReader(textReader, options))
75 return Deserialize<T>(reader); 72 return Deserialize<T>(reader);
76 } 73 }
77 74
78 public static T DeserializeJsonFromString<T>(string data) { 75 public static T DeserializeJsonFromString<T>(string data) {
79 using(var reader = new StringReader(data)) { 76 using (var reader = new StringReader(data)) {
80 return DeserializeJson<T>(reader); 77 return DeserializeJson<T>(reader);
81 } 78 }
82 } 79 }
83 80
84 public static void SerializeJson<T>(TextWriter writer, T obj) { 81 public static void SerializeJson<T>(TextWriter writer, T obj) {
85 var doc = SerializeAsXmlDocument(obj); 82 var doc = SerializeAsXmlDocument(obj);
86 XmlToJson.Default.Transform(doc, null, writer); 83 XmlToJson.Default.Transform(doc, null, writer);
87 } 84 }
88 85
89 public static string SerializeJsonAsString<T>(T obj) { 86 public static string SerializeJsonAsString<T>(T obj) {
90 using(var writer = new StringWriter()) { 87 using (var writer = new StringWriter()) {
91 SerializeJson(writer, obj); 88 SerializeJson(writer, obj);
92 return writer.ToString(); 89 return writer.ToString();
93 } 90 }
94 } 91 }
95 } 92 }