Exemplo n.º 1
0
 private void readMultiDimensionalArrayItems(XmlReader reader, ICollection<MultiDimensionalArrayItem> items, Type expectedElementType)
 {
     while (reader.Read())
     {
         if (isItemFound(reader))
         {
             using (var subReader = new SubtreeReader(reader))
             {
                 readMultiDimensionalArrayItem(subReader.Reader, items, expectedElementType);
             }
         }
     }
 }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="properties"></param>
        /// <param name="ownerType">these properties belong to that type</param>
        private void readProperties(XmlReader reader, ICollection<Property> properties, Type ownerType)
        {
            while (reader.Read())
            {
                var propertyTag = getPropertyTag(reader);
                if (propertyTag != PropertyTag.Unknown)
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        // check if the property with the name exists
                        var subPropertyName = getNameAttribute(subReader.Reader);
                        if (string.IsNullOrEmpty(subPropertyName)) continue;

                        // estimating the propertyInfo
                        var subPropertyInfo = ownerType.GetProperty(subPropertyName);

                        var subProperty = deserialize(subReader.Reader, propertyTag, subPropertyInfo.PropertyType);
                        properties.Add(subProperty);
                    }
                }
            }
        }
Exemplo n.º 3
0
 private void readItems(XmlReader reader, ICollection<Property> items, Type expectedElementType)
 {
     while (reader.Read())
     {
         var propertyTag = getPropertyTag(reader);
         if (propertyTag != PropertyTag.Unknown)
         {
             // Property is found
             using (var subReader = new SubtreeReader(reader))
             {
                 var subProperty = deserialize(subReader.Reader, propertyTag, expectedElementType);
                 items.Add(subProperty);
             }
         }
     }
 }
Exemplo n.º 4
0
        private void readMultiDimensionalArrayItem(XmlReader reader, ICollection<MultiDimensionalArrayItem> items, Type expectedElementType)
        {
            var indexes = getIndexesAttribute(reader);
            while (reader.Read())
            {
                var propertyTag = getPropertyTag(reader);
                if (propertyTag == PropertyTag.Unknown) continue;

                using (var subReader = new SubtreeReader(reader))
                {
                    var value = deserialize(subReader.Reader, propertyTag, expectedElementType);
                    var item = new MultiDimensionalArrayItem(indexes, value);
                    items.Add(item);
                }
            }
        }
Exemplo n.º 5
0
 private void readDictionaryItems(XmlReader reader, ICollection<KeyValueItem> items, Type expectedKeyType, Type expectedValueType)
 {
     while (reader.Read())
     {
         if (isItemFound(reader))
         {
             using (var subReader = new SubtreeReader(reader))
             {
                 readDictionaryItem(subReader.Reader, items, expectedKeyType, expectedValueType);
             }
         }
     }
 }
Exemplo n.º 6
0
 private void readDimensionInfos(XmlReader reader, ICollection<DimensionInfo> infos)
 {
     while (reader.Read())
     {
         if (isDimensionInfoFound(reader))
         {
             using (var subReader = new SubtreeReader(reader))
             {
                 readDimensionInfo(subReader.Reader, infos);
             }
         }
     }
 }
Exemplo n.º 7
0
        private void parseSingleDimensionalArrayProperty(XmlReader reader, SingleDimensionalArrayProperty property)
        {
            // ElementType
            property.ElementType = getElementTypeAttribute(reader);

            // LowerBound
            property.LowerBound = getLowerBoundAttribute(reader);

            // Items
            while (reader.Read())
            {
                if (areItemsFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readItems(subReader.Reader, property.Items, property.ElementType);
                    }
                }
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// There can be only two items in one dictionary item - key and value
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="items"></param>
        /// <param name="expectedKeyType"></param>
        /// <param name="expectedValueType"></param>
        private void readDictionaryItem(XmlReader reader, ICollection<KeyValueItem> items, Type expectedKeyType, Type expectedValueType)
        {
            Property keyProperty = null;
            Property valueProperty = null;
            while (reader.Read())
            {
                // check if key and value was found
                if (keyProperty != null && valueProperty != null) break;

                var propertyTag = getPropertyTag(reader);
                if (propertyTag == PropertyTag.Unknown) continue;

                using (var subReader = new SubtreeReader(reader))
                {
                    if (keyProperty == null)
                    {
                        // Key was not defined yet (the first item was found)
                        keyProperty = deserialize(subReader.Reader, propertyTag, expectedKeyType);
                        continue;
                    }

                    // key was defined (the second item was found)
                    valueProperty = deserialize(subReader.Reader, propertyTag, expectedValueType);
                }
            }

            // check if both properties are valid
            if (keyProperty != null && valueProperty != null)
            {
                // Item is valid
                var item = new KeyValueItem(keyProperty, valueProperty);
                items.Add(item);
            }
        }
Exemplo n.º 9
0
        private void parseMultiDimensionalArrayProperty(XmlReader reader, MultiDimensionalArrayProperty property)
        {
            property.ElementType = getElementTypeAttribute(reader);

            while (reader.Read())
            {
                // DimensionInfos
                if (areDimensionInfosFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readDimensionInfos(subReader.Reader, property.DimensionInfos);
                    }
                }

                // Items
                if (areItemsFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readMultiDimensionalArrayItems(subReader.Reader, property.Items, property.ElementType);
                    }
                }
            }
        }
Exemplo n.º 10
0
        private void parseDictionaryProperty(XmlReader reader, DictionaryProperty property)
        {
            property.KeyType = getKeyTypeAttribute(reader);
            property.ValueType = getValueTypeAttribute(reader);

            while (reader.Read())
            {
                // Properties
                if (arePropertiesFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readProperties(subReader.Reader, property.Properties, property.Type);
                    }
                }

                // Items
                if (areItemsFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readDictionaryItems(subReader.Reader, property.Items, property.KeyType, property.ValueType);
                    }
                }
            }
        }
Exemplo n.º 11
0
 private void parseComplexProperty(XmlReader reader, ComplexProperty property)
 {
     while (reader.Read())
     {
         if (arePropertiesFound(reader))
         {
             using (var subReader = new SubtreeReader(reader))
             {
                 readProperties(subReader.Reader, property.Properties, property.Type);
             }
         }
     }
 }
Exemplo n.º 12
0
        private void parseCollectionProperty(XmlReader reader, CollectionProperty property)
        {
            // ElementType
            property.ElementType = getElementTypeAttribute(reader);

            while (reader.Read())
            {
                // Properties
                if (arePropertiesFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readProperties(subReader.Reader, property.Properties, property.Type);
                    }
                }

                // Items
                if (areItemsFound(reader))
                {
                    using (var subReader = new SubtreeReader(reader))
                    {
                        readItems(subReader.Reader, property.Items, property.ElementType);
                    }
                }
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Deserialize a stream a create the property
        /// </summary>
        /// <returns></returns>
        public Property Deserialize()
        {
            while (_reader.Read())
            {
                // In what xml tag is the property saved
                var propertyTag = getPropertyTag(_reader);

                // check if the property was found
                if (propertyTag == PropertyTag.Unknown) continue;

                // Create the subreader and analyse its nodes
                using (var subReader = new SubtreeReader(_reader))
                {
                    return deserialize(subReader.Reader, propertyTag, null);
                }
            }

            return null;
        }