From 016be02cd68aa0a09270d93b8df782d012f8a478 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Wed, 25 Sep 2019 13:24:39 +0200 Subject: More warning fixes --- .../Serialization/MyXmlSerializer.cs | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Emby.Server.Implementations/Serialization/MyXmlSerializer.cs (limited to 'Emby.Server.Implementations/Serialization/MyXmlSerializer.cs') diff --git a/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs b/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs new file mode 100644 index 000000000..296822981 --- /dev/null +++ b/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using MediaBrowser.Model.Serialization; + +namespace Emby.Server.Implementations.Serialization +{ + /// + /// Provides a wrapper around third party xml serialization. + /// + public class MyXmlSerializer : IXmlSerializer + { + // Need to cache these + // http://dotnetcodebox.blogspot.com/2013/01/xmlserializer-class-may-result-in.html + private static readonly ConcurrentDictionary _serializers = + new ConcurrentDictionary(); + + private static XmlSerializer GetSerializer(Type type) + => _serializers.GetOrAdd(type.FullName, _ => new XmlSerializer(type)); + + /// + /// Serializes to writer. + /// + /// The obj. + /// The writer. + private void SerializeToWriter(object obj, XmlWriter writer) + { + var netSerializer = GetSerializer(obj.GetType()); + netSerializer.Serialize(writer, obj); + } + + /// + /// Deserializes from stream. + /// + /// The type. + /// The stream. + /// System.Object. + public object DeserializeFromStream(Type type, Stream stream) + { + using (var reader = XmlReader.Create(stream)) + { + var netSerializer = GetSerializer(type); + return netSerializer.Deserialize(reader); + } + } + + /// + /// Serializes to stream. + /// + /// The obj. + /// The stream. + public void SerializeToStream(object obj, Stream stream) + { + using (var writer = new XmlTextWriter(stream, null)) + { + writer.Formatting = Formatting.Indented; + SerializeToWriter(obj, writer); + } + } + + /// + /// Serializes to file. + /// + /// The obj. + /// The file. + public void SerializeToFile(object obj, string file) + { + using (var stream = new FileStream(file, FileMode.Create)) + { + SerializeToStream(obj, stream); + } + } + + /// + /// Deserializes from file. + /// + /// The type. + /// The file. + /// System.Object. + public object DeserializeFromFile(Type type, string file) + { + using (var stream = File.OpenRead(file)) + { + return DeserializeFromStream(type, stream); + } + } + + /// + /// Deserializes from bytes. + /// + /// The type. + /// The buffer. + /// System.Object. + public object DeserializeFromBytes(Type type, byte[] buffer) + { + using (var stream = new MemoryStream(buffer)) + { + return DeserializeFromStream(type, stream); + } + } + } +} -- cgit v1.2.3