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); } } } }
/// <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); } } } }
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); } } } }
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); } } }
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); } } } }
private void readDimensionInfos(XmlReader reader, ICollection<DimensionInfo> infos) { while (reader.Read()) { if (isDimensionInfoFound(reader)) { using (var subReader = new SubtreeReader(reader)) { readDimensionInfo(subReader.Reader, infos); } } } }
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); } } } }
/// <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); } }
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); } } } }
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); } } } }
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); } } } }
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); } } } }
/// <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; }