コード例 #1
0
        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);
        }
コード例 #2
0
        public XMLDictionaryTypeHandler(Type type, XMLTypeHandler elementTypeHandler) : base(type, elementTypeHandler.Type, elementTypeHandler)
        {
            // Make a dictionary type with the arguments of the Key/Value generic element type.
            Type genericTypeDef = Type.GetGenericTypeDefinition();

            _dictGenericType = genericTypeDef.MakeGenericType(elementTypeHandler.Type.GetGenericArguments());
        }
コード例 #3
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] == '/')
コード例 #4
0
        public override object Deserialize(XMLReader input)
        {
            var backingList = 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[^ 1] == '/' ? null : handler.Deserialize(input);
コード例 #5
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();
            }
        }
コード例 #6
0
 public XMLArrayTypeHandler(Type type, Type elementType) : base(type)
 {
     _elementTypeHandler = XMLHelpers.GetTypeHandler(elementType);
     _elementType        = elementType; // non-opaque
 }
コード例 #7
0
ファイル: XMLArrayTypeHandler.cs プロジェクト: Cryru/Emotion
 public XMLArrayTypeHandler(Type type, Type nonOpaqueElementType, XMLTypeHandler elementTypeHandler) : base(type)
 {
     _elementTypeHandler = elementTypeHandler;
     _elementType        = nonOpaqueElementType;
 }
コード例 #8
0
 /// <inheritdoc />
 public XMLListHandler(Type type, Type nonOpaqueElementType, XMLTypeHandler elementTypeHandler) : base(type, nonOpaqueElementType, elementTypeHandler)
 {
 }