< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Dispatcher.XmlSerializerObjectSerializer
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Dispatcher/XmlSerializerObjectSerializer.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 46
Coverable lines: 46
Total lines: 136
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 24
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
.ctor(...)0%220%
Initialize(...)0%10100%
WriteObject(...)0%220%
WriteStartObject(...)100%110%
WriteObjectContent(...)100%110%
WriteEndObject(...)100%110%
ReadObject(...)0%660%
IsStartObject(...)0%440%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Dispatcher/XmlSerializerObjectSerializer.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using System.Runtime.Serialization;
 6using System.Xml;
 7using System.Xml.Serialization;
 8
 9namespace CoreWCF.Dispatcher
 10{
 11    internal class XmlSerializerObjectSerializer : XmlObjectSerializer
 12    {
 13        private XmlSerializer _serializer;
 14        private Type _rootType;
 15        private string _rootName;
 16        private string _rootNamespace;
 17        private bool _isSerializerSetExplicit = false;
 18
 019        internal XmlSerializerObjectSerializer(Type type)
 20        {
 021            Initialize(type, null /*rootName*/, null /*rootNamespace*/, null /*xmlSerializer*/);
 022        }
 23
 024        internal XmlSerializerObjectSerializer(Type type, XmlQualifiedName qualifiedName, XmlSerializer xmlSerializer)
 25        {
 026            if (qualifiedName == null)
 27            {
 028                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(qualifiedName));
 29            }
 030            Initialize(type, qualifiedName.Name, qualifiedName.Namespace, xmlSerializer);
 031        }
 32
 33        private void Initialize(Type type, string rootName, string rootNamespace, XmlSerializer xmlSerializer)
 34        {
 035            _rootType = type ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(type));
 036            _rootName = rootName;
 037            _rootNamespace = rootNamespace ?? string.Empty;
 038            _serializer = xmlSerializer;
 39
 040            if (_serializer == null)
 41            {
 042                if (_rootName == null)
 43                {
 044                    _serializer = new XmlSerializer(type);
 45                }
 46                else
 47                {
 048                    XmlRootAttribute xmlRoot = new XmlRootAttribute
 049                    {
 050                        ElementName = _rootName,
 051                        Namespace = _rootNamespace
 052                    };
 053                    _serializer = new XmlSerializer(type, xmlRoot);
 54                }
 55            }
 56            else
 57            {
 058                _isSerializerSetExplicit = true;
 59            }
 60
 61            //try to get rootName and rootNamespace from type since root name not set explicitly
 062            if (_rootName == null)
 63            {
 064                XmlTypeMapping mapping = new XmlReflectionImporter().ImportTypeMapping(_rootType);
 065                _rootName = mapping.ElementName;
 066                _rootNamespace = mapping.Namespace;
 67            }
 068        }
 69
 70        public override void WriteObject(XmlDictionaryWriter writer, object graph)
 71        {
 072            if (_isSerializerSetExplicit)
 73            {
 074                _serializer.Serialize(writer, new object[] { graph });
 75            }
 76            else
 77            {
 078                _serializer.Serialize(writer, graph);
 79            }
 080        }
 81
 82        public override void WriteStartObject(XmlDictionaryWriter writer, object graph)
 83        {
 084            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
 85        }
 86
 87        public override void WriteObjectContent(XmlDictionaryWriter writer, object graph)
 88        {
 089            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
 90        }
 91
 92        public override void WriteEndObject(XmlDictionaryWriter writer)
 93        {
 094            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
 95        }
 96
 97        public override object ReadObject(XmlDictionaryReader reader, bool verifyObjectName)
 98        {
 099            if (_isSerializerSetExplicit)
 100            {
 0101                object[] deserializedObjects = (object[])_serializer.Deserialize(reader);
 0102                if (deserializedObjects != null && deserializedObjects.Length > 0)
 103                {
 0104                    return deserializedObjects[0];
 105                }
 106                else
 107                {
 0108                    return null;
 109                }
 110            }
 111            else
 112            {
 0113                return _serializer.Deserialize(reader);
 114            }
 115        }
 116
 117        public override bool IsStartObject(XmlDictionaryReader reader)
 118        {
 0119            if (reader == null)
 120            {
 0121                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(reader));
 122            }
 123
 0124            reader.MoveToElement();
 125
 0126            if (_rootName != null)
 127            {
 0128                return reader.IsStartElement(_rootName, _rootNamespace);
 129            }
 130            else
 131            {
 0132                return reader.IsStartElement();
 133            }
 134        }
 135    }
 136}