private List <T> ProcessArray <T>(IEnumerable <Value> list, List <T> array) { List <T> elements = array; if (elements == null) { elements = new List <T>(); } elements.Clear(); int pos = 0; foreach (Value value in list) { object obj = value.Item; var datum = obj as DatumType; var collection = obj as Collection; var indexedArray = obj as IndexedArrayType; var dae = Activator.CreateInstance <T>(); if (datum != null) { if (dae is DatumType) { datum.CopyTo(dae as DatumType); } PropertyInfo piValue = dae.GetType().GetProperty("value"); if (piValue != null) { piValue.SetValue(dae, Datum.GetDatumValue(datum), null); } } PropertyInfo piPos = dae.GetType().GetProperty("position"); if (piPos != null) { piPos.SetValue(dae, "[" + pos++ + "]", null); } elements.Add(dae); } return(elements); }