protected override void PopulateObjectMembers( object @object, ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { var type = @object.GetType(); if (type.IsArray) { var array = (Array)@object; int index = 0; foreach (var item in MembersToObjects(data, settings, session)) { array.SetValue(item, index++); } } else { var collectionType = CollectionTypeOf(@object); var addMethod = collectionType.GetMethod("Add", new[] { ItemTypeOf(collectionType) }); Debug.Assert(addMethod != null); foreach (var item in MembersToObjects(data, settings, session)) { addMethod.Invoke(@object, new[] { item }); } } }
protected override object CreateObject(ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { var type = data.ObjectType; return(type.IsArray ? Array.CreateInstance(type.GetElementType(), data.Members.Count) : base.CreateObject(data, settings, session)); }
protected override IEnumerable <ObjectData.Member> ToDataMembers( object @object, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { var dataMembers = new List <ObjectData.Member>(); //var itemType = ItemTypeOf(@object); var collection = (IEnumerable)@object; foreach (var item in collection) { var data = Data.ToData(item, settings, session); dataMembers.Add(new ObjectData.Member("Item", data)); } return(dataMembers); }
private static IEnumerable <object> MembersToObjects(ObjectData data, ObjectDataConvertSettings settings, ObjectDataConvertSession session) { return(data.Members.Select(m => Data.ToObject(m.Value, settings, session))); }