public static object GetClassFromJson(KEntity entity) { try { var allClasses = entity.GetAllAvailableClasses(); var finalList = new List <object>(); var masterClassList = new List <KClass>(); var objectClasses = new List <KClass>(); if (allClasses.Any()) { foreach (var widgetClass in allClasses) { if (widgetClass.ClassType == KClassType.BaseClass) { masterClassList.Add(widgetClass); } else if (widgetClass.ClassType == KClassType.UserDefinedClass) { var classWithObjReference = widgetClass.PropertyList.Where(s => s.Type == PropertyType.obj).ToList(); if (!classWithObjReference.Any()) { var userClass = new ClassBuilder(widgetClass.Name.ToLower()); var userDefinedClass = GetClassFromProperties(widgetClass.PropertyList.ToList(), userClass, finalList); if (userDefinedClass != null) { finalList.Add(userDefinedClass); } } else { objectClasses.Add(widgetClass); } } else if (widgetClass.ClassType == KClassType.DataTypeClass) { var userClass = new ClassBuilder(widgetClass.Name.ToLower()); var userDefinedClass = GetClassFromProperties(widgetClass.PropertyList.ToList(), userClass, finalList); if (userDefinedClass != null) { finalList.Add(userDefinedClass); } } } if (objectClasses.Any()) { foreach (var objectClass in objectClasses) { var userClass = new ClassBuilder(objectClass.Name.ToLower()); var userDefinedClass = GetClassFromProperties(objectClass.PropertyList.ToList(), userClass, finalList); if (userDefinedClass != null) { finalList.Add(userDefinedClass); } } } if (masterClassList != null && masterClassList.Any()) { foreach (var masterClass in masterClassList) { var userClass = new ClassBuilder(masterClass.Name.ToLower()); var finalMasterClass = GetClassFromProperties(masterClass.PropertyList.ToList(), userClass, finalList); if (finalMasterClass != null) { return(finalMasterClass); } } } } } catch (Exception ex) { } return(null); }
internal static object GetClassFromProperties(List <KProperty> propertyList, ClassBuilder parentClass, List <object> existingClasses) { try { if (propertyList != null && propertyList.Count() > 0) { var propertyNames = new List <string>(); var propertyTypes = new List <Type>(); foreach (var prop in propertyList) { if (prop.Type == PropertyType.str) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(typeof(string)); } else if (prop.Type == PropertyType.date) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(typeof(DateTime)); } else if (prop.Type == PropertyType.boolean) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(typeof(bool)); } else if (prop.Type == PropertyType.number) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(typeof(int)); } else if (prop.Type == PropertyType.array) { if (existingClasses != null && existingClasses.Any()) { var objectClass = existingClasses.Where(s => s.GetType().Name.Equals(prop.DataType.Name.ToLower().Replace("[", "").Replace("]", ""))).FirstOrDefault(); if (objectClass != null) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(objectClass.GetType()); } } } else if (prop.Type == PropertyType.obj) { if (existingClasses != null && existingClasses.Any()) { var objectClass = existingClasses.Where(s => s.GetType().Name.Equals(prop.DataType.Name.ToLower())).FirstOrDefault(); if (objectClass != null) { propertyNames.Add(prop.Name.ToLower()); propertyTypes.Add(objectClass.GetType()); } } } } var myclass = parentClass.CreateObject(propertyNames.ToArray(), propertyTypes.ToArray()); return(myclass); } } catch (Exception ex) { } return(null); }