private bool FillMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property, InternalTypeInfo info, object value) { if (property == null) { return(false); } property.ElementType = info.ElementType; var analyzer = new ArrayAnalyzer(value); // DimensionInfos property.DimensionInfos = analyzer.ArrayInfo.DimensionInfos; // Items foreach (var indexSet in analyzer.GetIndexes()) { var subValue = ((Array)value).GetValue(indexSet); var itemProperty = CreateProperty(null, subValue); property.Items.Add(new MultiDimensionalArrayItem(indexSet, itemProperty)); } return(true); }
private object createObjectFromMultidimensionalArrayProperty(MultiDimensionalArrayProperty property) { // determine array type MultiDimensionalArrayCreatingInfo creatingInfo = getMultiDimensionalArrayCreatingInfo(property.DimensionInfos); // Instantiating the array Array array = createArrayInstance(property.ElementType, creatingInfo.Lengths, creatingInfo.LowerBounds); if (property.Reference != null) { // property has Reference, only objects referenced multiple times // have properties with references. Object must be cached to // resolve its references in the future. _objectCache.Add(property.Reference.Id, array); } // fill the values foreach (MultiDimensionalArrayItem item in property.Items) { object value = CreateObject(item.Value); if (value != null) { array.SetValue(value, item.Indexes); } } return(array); }
private object CreateObjectFromMultidimensionalArrayProperty(MultiDimensionalArrayProperty property) { // determine array type var creatingInfo = GetMultiDimensionalArrayCreatingInfo(property.DimensionInfos); // Instantiating the array var array = CreateArrayInstance(property.ElementType, creatingInfo.Lengths, creatingInfo.LowerBounds); if (property.Reference != null) { _objectCache.Add(property.Reference.Id, array); } // fill the values foreach (var item in property.Items) { var value = CreateObject(item.Value); if (value != null) { array.SetValue(value, item.Indexes); } } return(array); }
private void parseMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property) { // Element Type property.ElementType = this._reader.ReadType(); // Dimension Infos this.readDimensionInfos(property.DimensionInfos); // Items this.readMultiDimensionalArrayItems(property.Items, property.ElementType); }
private void parseMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property) { property.ElementType = property.Type != null?TypeInfo.GetTypeInfo(property.Type).ElementType : null; foreach (string subElement in _reader.ReadSubElements()) { if (subElement == SubElements.Dimensions) { // Read dimensions readDimensionInfos(property.DimensionInfos); } if (subElement == SubElements.Items) { // Read items readMultiDimensionalArrayItems(property.Items, property.ElementType); } } }
private bool FillMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property, TypeInfo info, object value) { if (property == null) { return false; } property.ElementType = info.ElementType; var analyzer = new ArrayAnalyzer(value); // DimensionInfos property.DimensionInfos = analyzer.ArrayInfo.DimensionInfos; // Items foreach (var indexSet in analyzer.GetIndexes()) { var subValue = ((Array)value).GetValue(indexSet); var itemProperty = CreateProperty(null, subValue); property.Items.Add(new MultiDimensionalArrayItem(indexSet, itemProperty)); } return true; }
private object createObjectFromMultidimensionalArrayProperty(MultiDimensionalArrayProperty property) { // determine array type var creatingInfo = getMultiDimensionalArrayCreatingInfo(property.DimensionInfos); // Instantiating the array var array = createArrayInstance(property.ElementType, creatingInfo.Lengths, creatingInfo.LowerBounds); // fill the values foreach (var item in property.Items) { var value = CreateObject(item.Value); if (value != null) { array.SetValue(value, item.Indexes); } } return array; }
private object createObjectFromMultidimensionalArrayProperty(MultiDimensionalArrayProperty property) { // determine array type MultiDimensionalArrayCreatingInfo creatingInfo = getMultiDimensionalArrayCreatingInfo(property.DimensionInfos); // Instantiating the array Array array = createArrayInstance(property.ElementType, creatingInfo.Lengths, creatingInfo.LowerBounds); if (property.Reference != null) { // property has Reference, only objects referenced multiple times // have properties with references. Object must be cached to // resolve its references in the future. _objectCache.Add(property.Reference.Id, array); } // fill the values foreach (MultiDimensionalArrayItem item in property.Items) { object value = CreateObject(item.Value); if (value != null) { array.SetValue(value, item.Indexes); } } return array; }
private void parseMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property) { // Element Type property.ElementType = _reader.ReadType(); // Dimension Infos readDimensionInfos(property.DimensionInfos); // Items readMultiDimensionalArrayItems(property.Items, property.ElementType); }
private void parseMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property) { property.ElementType = property.Type != null ? Polenter.Serialization.Serializing.TypeInfo.GetTypeInfo(property.Type, _simpleTypes).ElementType : null; foreach (string subElement in _reader.ReadSubElements()) { if (subElement == SubElements.Dimensions) { // Read dimensions readDimensionInfos(property.DimensionInfos); } if (subElement == SubElements.Items) { // Read items readMultiDimensionalArrayItems(property.Items, property.ElementType); } } }
private void ParseMultiDimensionalArrayProperty(MultiDimensionalArrayProperty property) { property.ElementType = property.Type != null ? TypeInfo.GetTypeInfo(property.Type).ElementType : null; foreach (var subElement in _reader.ReadSubElements()) { if (subElement == SubElements.Dimensions) { // Read dimensions ReadDimensionInfos(property.DimensionInfos); } if (subElement == SubElements.Items) { // Read items ReadMultiDimensionalArrayItems(property.Items, property.ElementType); } } }
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); } } } }