Mercurial > pub > ImplabNet
annotate 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 |
rev | line source |
---|---|
229 | 1 using System; |
2 using System.Collections.Generic; | |
231 | 3 using System.IO; |
229 | 4 using System.Linq; |
264 | 5 using System.Reflection; |
229 | 6 using System.Text; |
7 using System.Threading.Tasks; | |
8 using System.Xml; | |
9 using System.Xml.Linq; | |
264 | 10 using System.Xml.Serialization; |
229 | 11 |
12 namespace Implab.Xml { | |
13 public static class SerializationHelpers { | |
14 public static string SerializeAsString<T>(T obj) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
15 return XmlDefaultSerializer<T>.Instance.SerializeAsString(obj); |
229 | 16 } |
17 | |
18 public static void Serialize<T>(XmlWriter writer, T obj) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
19 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj); |
229 | 20 } |
21 | |
22 public static XmlDocument SerializeAsXmlDocument<T>(T obj) { | |
23 var doc = new XmlDocument(); | |
24 using (var writer = doc.CreateNavigator().AppendChild()) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
25 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj); |
229 | 26 } |
27 return doc; | |
28 } | |
29 | |
30 public static XDocument SerializeAsXDocument<T>(T obj) { | |
31 var doc = new XDocument(); | |
32 using (var writer = doc.CreateWriter()) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
33 XmlDefaultSerializer<T>.Instance.Serialize(writer, obj); |
229 | 34 } |
35 return doc; | |
36 } | |
37 | |
231 | 38 public static void SerializeToFile<T>(string file, T obj) { |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
39 XmlDefaultSerializer<T>.Instance.SerializeToFile(obj, file); |
231 | 40 } |
41 | |
251 | 42 public static void SerializeToElementChild<T>(XmlElement element, T obj) { |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
43 XmlDefaultSerializer<T>.Instance.Serialize(obj, element); |
251 | 44 } |
45 | |
46 public static T Deserialize<T>(XmlReader reader) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
47 return (T)XmlDefaultSerializer<T>.Instance.Deserialize(reader); |
251 | 48 } |
49 | |
50 public static T DeserializeFromFile<T>(string file) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
51 return (T)XmlDefaultSerializer<T>.Instance.DeserializeFromFile(file); |
251 | 52 } |
53 | |
229 | 54 public static T DeserializeFromString<T>(string data) { |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
55 return (T)XmlDefaultSerializer<T>.Instance.DeserializeFromString(data); |
229 | 56 } |
57 | |
58 public static T DeserializeFromXmlNode<T>(XmlNode node) { | |
59 Safe.ArgumentNotNull(node, nameof(node)); | |
60 using (var reader = node.CreateNavigator().ReadSubtree()) | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
61 return (T)XmlDefaultSerializer<T>.Instance.Deserialize(reader); |
229 | 62 } |
264 | 63 |
64 public static T DeserializeJson<T>(TextReader textReader) { | |
65 var options = new JsonXmlReaderOptions { | |
66 NamespaceUri = typeof(T).GetCustomAttribute<XmlRootAttribute>()?.Namespace, | |
67 RootName = typeof(T).Name, | |
68 FlattenArrays = true | |
69 }; | |
70 | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
71 using (var reader = JsonXmlReader.CreateJsonXmlReader(textReader, options)) |
264 | 72 return Deserialize<T>(reader); |
73 } | |
74 | |
75 public static T DeserializeJsonFromString<T>(string data) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
76 using (var reader = new StringReader(data)) { |
264 | 77 return DeserializeJson<T>(reader); |
78 } | |
79 } | |
80 | |
81 public static void SerializeJson<T>(TextWriter writer, T obj) { | |
82 var doc = SerializeAsXmlDocument(obj); | |
83 XmlToJson.Default.Transform(doc, null, writer); | |
84 } | |
85 | |
86 public static string SerializeJsonAsString<T>(T obj) { | |
278
6691aff01de1
Implab: added XmlDefaultSeializer (SerializersPool is now obsolete)
cin
parents:
264
diff
changeset
|
87 using (var writer = new StringWriter()) { |
264 | 88 SerializeJson(writer, obj); |
89 return writer.ToString(); | |
90 } | |
91 } | |
229 | 92 } |
93 } |