< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Serialization.MyXmlSerializer
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs
Line coverage
67%
Covered lines: 19
Uncovered lines: 9
Coverable lines: 28
Total lines: 108
Line coverage: 67.8%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
GetSerializer(...)50%22100%
SerializeToWriter(...)100%11100%
DeserializeFromStream(...)100%210%
SerializeToStream(...)100%11100%
SerializeToFile(...)100%11100%
DeserializeFromFile(...)100%1.3133.33%
DeserializeFromBytes(...)100%210%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Serialization/MyXmlSerializer.cs

#LineLine coverage
 1using System;
 2using System.Collections.Concurrent;
 3using System.IO;
 4using System.Xml;
 5using System.Xml.Serialization;
 6using MediaBrowser.Model.IO;
 7using MediaBrowser.Model.Serialization;
 8
 9namespace Emby.Server.Implementations.Serialization
 10{
 11    /// <summary>
 12    /// Provides a wrapper around third party xml serialization.
 13    /// </summary>
 14    public class MyXmlSerializer : IXmlSerializer
 15    {
 16        // Need to cache these
 17        // http://dotnetcodebox.blogspot.com/2013/01/xmlserializer-class-may-result-in.html
 2218        private readonly ConcurrentDictionary<string, XmlSerializer> _serializers = new();
 19
 20        private XmlSerializer GetSerializer(Type type)
 10921            => _serializers.GetOrAdd(
 10922                type.FullName ?? throw new ArgumentException($"Invalid type {type}."),
 10923                static (_, t) => new XmlSerializer(t),
 10924                type);
 25
 26        /// <summary>
 27        /// Serializes to writer.
 28        /// </summary>
 29        /// <param name="obj">The obj.</param>
 30        /// <param name="writer">The writer.</param>
 31        private void SerializeToWriter(object obj, XmlWriter writer)
 32        {
 10933            var netSerializer = GetSerializer(obj.GetType());
 10934            netSerializer.Serialize(writer, obj);
 10935        }
 36
 37        /// <summary>
 38        /// Deserializes from stream.
 39        /// </summary>
 40        /// <param name="type">The type.</param>
 41        /// <param name="stream">The stream.</param>
 42        /// <returns>System.Object.</returns>
 43        public object? DeserializeFromStream(Type type, Stream stream)
 44        {
 045            using (var reader = XmlReader.Create(stream))
 46            {
 047                var netSerializer = GetSerializer(type);
 048                return netSerializer.Deserialize(reader);
 49            }
 050        }
 51
 52        /// <summary>
 53        /// Serializes to stream.
 54        /// </summary>
 55        /// <param name="obj">The obj.</param>
 56        /// <param name="stream">The stream.</param>
 57        public void SerializeToStream(object obj, Stream stream)
 58        {
 10959            using (var writer = new StreamWriter(stream, null, IODefaults.StreamWriterBufferSize, true))
 10960            using (var textWriter = new XmlTextWriter(writer))
 61            {
 10962                textWriter.Formatting = Formatting.Indented;
 10963                SerializeToWriter(obj, textWriter);
 10964            }
 10965        }
 66
 67        /// <summary>
 68        /// Serializes to file.
 69        /// </summary>
 70        /// <param name="obj">The obj.</param>
 71        /// <param name="file">The file.</param>
 72        public void SerializeToFile(object obj, string file)
 73        {
 8774            using (var stream = new FileStream(file, FileMode.Create, FileAccess.Write))
 75            {
 8776                SerializeToStream(obj, stream);
 8777            }
 8778        }
 79
 80        /// <summary>
 81        /// Deserializes from file.
 82        /// </summary>
 83        /// <param name="type">The type.</param>
 84        /// <param name="file">The file.</param>
 85        /// <returns>System.Object.</returns>
 86        public object? DeserializeFromFile(Type type, string file)
 87        {
 4488            using (var stream = File.OpenRead(file))
 89            {
 090                return DeserializeFromStream(type, stream);
 91            }
 092        }
 93
 94        /// <summary>
 95        /// Deserializes from bytes.
 96        /// </summary>
 97        /// <param name="type">The type.</param>
 98        /// <param name="buffer">The buffer.</param>
 99        /// <returns>System.Object.</returns>
 100        public object? DeserializeFromBytes(Type type, byte[] buffer)
 101        {
 0102            using (var stream = new MemoryStream(buffer, 0, buffer.Length, false, true))
 103            {
 0104                return DeserializeFromStream(type, stream);
 105            }
 0106        }
 107    }
 108}