SerializationHelpers.cs
96 lines
| 3.4 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r229 | using System; | ||
using System.Collections.Generic; | ||||
cin
|
r231 | using System.IO; | ||
cin
|
r229 | using System.Linq; | ||
cin
|
r264 | using System.Reflection; | ||
cin
|
r229 | using System.Text; | ||
using System.Threading.Tasks; | ||||
using System.Xml; | ||||
using System.Xml.Linq; | ||||
cin
|
r264 | using System.Xml.Serialization; | ||
cin
|
r229 | |||
namespace Implab.Xml { | ||||
public static class SerializationHelpers { | ||||
public static string SerializeAsString<T>(T obj) { | ||||
return SerializersPool<T>.Instance.SerializeAsString(obj); | ||||
} | ||||
public static void Serialize<T>(XmlWriter writer, T obj) { | ||||
SerializersPool<T>.Instance.Serialize(writer, obj); | ||||
} | ||||
public static XmlDocument SerializeAsXmlDocument<T>(T obj) { | ||||
var doc = new XmlDocument(); | ||||
using (var writer = doc.CreateNavigator().AppendChild()) { | ||||
SerializersPool<T>.Instance.Serialize(writer, obj); | ||||
} | ||||
return doc; | ||||
} | ||||
public static XDocument SerializeAsXDocument<T>(T obj) { | ||||
var doc = new XDocument(); | ||||
using (var writer = doc.CreateWriter()) { | ||||
SerializersPool<T>.Instance.Serialize(writer, obj); | ||||
} | ||||
return doc; | ||||
} | ||||
cin
|
r231 | public static void SerializeToFile<T>(string file, T obj) { | ||
using (var writer = File.CreateText(file)) | ||||
SerializersPool<T>.Instance.Serialize(writer, obj); | ||||
} | ||||
cin
|
r251 | public static void SerializeToElementChild<T>(XmlElement element, T obj) { | ||
using(var writer = element.CreateNavigator().AppendChild()) | ||||
SerializersPool<T>.Instance.Serialize(writer, obj); | ||||
} | ||||
public static T Deserialize<T>(XmlReader reader) { | ||||
return SerializersPool<T>.Instance.Deserialize(reader); | ||||
} | ||||
public static T DeserializeFromFile<T>(string file) { | ||||
using(var reader = XmlReader.Create(File.OpenText(file))) | ||||
return Deserialize<T>(reader); | ||||
} | ||||
cin
|
r229 | public static T DeserializeFromString<T>(string data) { | ||
return SerializersPool<T>.Instance.DeserializeFromString(data); | ||||
} | ||||
public static T DeserializeFromXmlNode<T>(XmlNode node) { | ||||
Safe.ArgumentNotNull(node, nameof(node)); | ||||
using (var reader = node.CreateNavigator().ReadSubtree()) | ||||
return SerializersPool<T>.Instance.Deserialize(reader); | ||||
} | ||||
cin
|
r264 | |||
public static T DeserializeJson<T>(TextReader textReader) { | ||||
var options = new JsonXmlReaderOptions { | ||||
NamespaceUri = typeof(T).GetCustomAttribute<XmlRootAttribute>()?.Namespace, | ||||
RootName = typeof(T).Name, | ||||
FlattenArrays = true | ||||
}; | ||||
using(var reader = JsonXmlReader.CreateJsonXmlReader(textReader, options)) | ||||
return Deserialize<T>(reader); | ||||
} | ||||
public static T DeserializeJsonFromString<T>(string data) { | ||||
using(var reader = new StringReader(data)) { | ||||
return DeserializeJson<T>(reader); | ||||
} | ||||
} | ||||
public static void SerializeJson<T>(TextWriter writer, T obj) { | ||||
var doc = SerializeAsXmlDocument(obj); | ||||
XmlToJson.Default.Transform(doc, null, writer); | ||||
} | ||||
public static string SerializeJsonAsString<T>(T obj) { | ||||
using(var writer = new StringWriter()) { | ||||
SerializeJson(writer, obj); | ||||
return writer.ToString(); | ||||
} | ||||
} | ||||
cin
|
r229 | } | ||
} | ||||