public TemplateMetaData GenerateTable(PropertyInfo listProp, object listValue) { var tmpMetaData = new TemplateMetaData(); var targetProperties = listProp.PropertyType.GenericTypeArguments[0].GetProperties(); tmpMetaData.Columns = new List <string> { }; if (listValue != null) { IList targetObjList = listProp.GetValue(listValue, null) as IList; foreach (var tarObj in targetObjList) { foreach (var targetProp in targetProperties) { var metaData = GeneratorCore(targetProp, tarObj); if (metaData == null) { continue; } tmpMetaData.Columns.Add(metaData.Name); } } } var customeAttr = GetCustomeMetaData(listProp); tmpMetaData.Name = customeAttr?.Name ?? listProp.Name; tmpMetaData.EleType = customeAttr?.EleType ?? "table"; tmpMetaData.Data = listValue; var tempStr = listProp.DeclaringType; return(tmpMetaData); }
private TemplateMetaData GeneratorCore(PropertyInfo propItem, object model) { var typeString = EnumeratPropInfos(propItem); var customeAttr = GetCustomeMetaData(propItem); TemplateMetaData metaData; if (typeString == "reference") { metaData = GenerateReference(propItem, model); } else if (typeString == "list") { var listValue = model == null ? null : propItem.GetValue(model); metaData = GenerateTable(propItem, listValue); } else { metaData = new TemplateMetaData { Name = customeAttr?.Name ?? propItem.Name, EleType = customeAttr?.EleType ?? typeString, Data = model != null?propItem.GetValue(model) : null }; } return(metaData); }
private TemplateMetaData GetCustomeMetaData(PropertyInfo propertyInfo) { var attr = propertyInfo.GetCustomAttribute <TemplateMetaDataAttribute>(); var metaData = new TemplateMetaData(); metaData.Name = attr?.Name; metaData.Name = attr?.Link; return(metaData); }
private TemplateMetaData GenerateReference(PropertyInfo propItem, object model) { var tmpMetaData = new TemplateMetaData(); var customeAttr = GetCustomeMetaData(propItem); tmpMetaData.Name = customeAttr?.Name ?? propItem.Name; tmpMetaData.EleType = customeAttr?.EleType ?? "table"; tmpMetaData.Data = model; tmpMetaData.Link = customeAttr?.Link ?? "/ProcessMetaData"; //var tempStr = listProp.DeclaringType; return(tmpMetaData); }
public List <TemplateMetaData> Generator <T>(T model) { var tmpMetaDataList = new List <TemplateMetaData>(); var _typeRef = typeof(T); var props = _typeRef.GetProperties(); foreach (var propItem in props) { TemplateMetaData metaData = GeneratorCore(propItem, model); tmpMetaDataList.Add(metaData); } return(tmpMetaDataList); }