public override object Deserialize(XMLReader input)
        {
            var backingArr = new List <object>();

            int depth = input.Depth;

            input.GoToNextTag();
            XMLTypeHandler handler = XMLHelpers.GetDerivedTypeHandlerFromXMLTag(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.GetDerivedTypeHandlerFromXMLTag(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 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.GetDerivedTypeHandlerFromXMLTag(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();
            }
        }