public static object ToDataShapeObject(this CompanyDTO company, List <string> lstOfFields) { List <string> lstOfFieldsToWorkWith = new List <string>(lstOfFields); if (!lstOfFieldsToWorkWith.Any()) { return(company); } else { var lstOfAddressFields = lstOfFieldsToWorkWith.Where(f => f.Contains("addresses.")).ToList(); bool returnPartialAddress = lstOfAddressFields.Any() && !lstOfAddressFields.Contains("addresses."); if (returnPartialAddress) { lstOfFieldsToWorkWith.RemoveAll(f => f.Contains("addresses.")); lstOfAddressFields = lstOfAddressFields.Select(f => f.Substring(f.IndexOf(".") + 1)).ToList(); } else { //lstOfAddressFields.Remove("addresses"); lstOfFieldsToWorkWith.RemoveAll(f => f.Contains("addresses.")); } ExpandoObject objectToReturn = new ExpandoObject(); foreach (var field in lstOfFieldsToWorkWith) { var fieldValue = company.GetType() .GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance) .GetValue(company, null); ((IDictionary <string, object>)objectToReturn).Add(field, fieldValue); } if (returnPartialAddress) { List <object> addresses = new List <object>(); foreach (var address in company.Addresses) { addresses.Add(address.ToDataShapeObject(lstOfAddressFields)); } ((IDictionary <string, object>)objectToReturn).Add("addresses", addresses); } return(objectToReturn); } }
public static object ToDataShapeObjectx(this CompanyDTO company, List <string> lstOfFields) { if (!lstOfFields.Any()) { return(company); } else { ExpandoObject objectToReturn = new ExpandoObject(); foreach (var field in lstOfFields) { var fieldValue = company.GetType() .GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance) .GetValue(company, null); ((IDictionary <string, object>)objectToReturn).Add(field, fieldValue); } return(objectToReturn); } }