Ejemplo n.º 1
0
        /// <inheritdoc />
        public override object Deserialize(XMLReader input)
        {
            var backingArr = new List <object>();

            int depth = input.Depth;

            input.GoToNextTag();
            XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string tag) ?? _elementTypeHandler;

            while (input.Depth >= depth && !input.Finished)
            {
                object newObj = tag.Contains("/") ? null : handler.Deserialize(input);
                backingArr.Add(newObj);
                input.GoToNextTag();
                handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out tag) ?? _elementTypeHandler;
            }

            Type listGenericType = XMLHelpers.ListType.MakeGenericType(_elementType);
            var  list            = (IList)Activator.CreateInstance(listGenericType, backingArr.Count);

            for (var i = 0; i < backingArr.Count; i++)
            {
                list.Add(backingArr[i]);
            }

            return(list);
        }
Ejemplo n.º 2
0
        public override object Deserialize(XMLReader input)
        {
            int    depth  = input.Depth;
            object newObj = Activator.CreateInstance(Type, true);

            input.GoToNextTag();
            while (input.Depth >= depth && !input.Finished)
            {
                XMLTypeHandler inheritedHandler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string currentTag);
                var            nullValue        = false;
                if (currentTag[^ 1] == '/')
Ejemplo n.º 3
0
        public override object Deserialize(XMLReader input)
        {
            var backingList = new List <object>();

            int depth = input.Depth;

            input.GoToNextTag();
            XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string tag) ?? _elementTypeHandler;

            while (input.Depth >= depth && !input.Finished)
            {
                object newObj = tag[^ 1] == '/' ? null : handler.Deserialize(input);
Ejemplo n.º 4
0
        /// <summary>
        /// Deserialize a key and value objects. These are like any other objects except the two properties are "Key" and "Value"
        /// and the reflection handlers are for the specific key/value generic tuple pair.
        /// </summary>
        /// <param name="input"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void DeserializeKeyValue(XMLReader input, out object key, out object value)
        {
            key   = _keyDefault;
            value = _valueDefault;

            int depth = input.Depth;

            input.GoToNextTag();
            while (input.Depth >= depth && !input.Finished)
            {
                XMLTypeHandler handler = XMLHelpers.GetInheritedTypeHandlerFromXMLTag(input, out string currentTag);
                switch (currentTag)
                {
                case "Key":
                    if (handler == null)
                    {
                        handler = _keyHandler.Value.TypeHandler;
                    }
                    key = handler.Deserialize(input);
                    break;

                case "Value":
                    if (handler == null)
                    {
                        handler = _valueHandler.Value.TypeHandler;
                    }
                    value = handler.Deserialize(input);
                    break;

                default:
                    Engine.Log.Warning($"Unknown deserialization tag in KVP - {currentTag}.", MessageSource.XML);
                    return;
                }

                input.GoToNextTag();
            }
        }