|
@@ -17,7 +17,7 @@ public class DynamicClassHelper
|
|
|
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");
|
|
|
TypeBuilder typeBuilder = moduleBuilder.DefineType(className, TypeAttributes.Public);
|
|
|
|
|
|
- foreach (var property in propInfos.OrderBy(d=>d.Sort).ToList())
|
|
|
+ foreach (var property in propInfos.OrderBy(d => d.Sort).ToList())
|
|
|
{
|
|
|
var propertyName = property.Prop.Trim().ToPascalCase();
|
|
|
var propertyType = typeof(string);
|
|
@@ -87,7 +87,8 @@ public class DynamicClassHelper
|
|
|
foreach (var property in propInfos.OrderBy(d => d.Sort).ToList())
|
|
|
{
|
|
|
var propertyName = property.Prop.Trim().ToPascalCase();
|
|
|
- var propertyType = sourceProps.FirstOrDefault(d => d.Name == propertyName)?.PropertyType ?? typeof(string);
|
|
|
+ //var propertyType = sourceProps.FirstOrDefault(d => d.Name == propertyName)?.PropertyType ?? typeof(string);
|
|
|
+ var propertyType = GetPropertyType(property.Prop, sourceProps);
|
|
|
|
|
|
FieldBuilder fieldBuilder = typeBuilder.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);
|
|
|
PropertyBuilder propertyBuilder = typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null);
|
|
@@ -123,4 +124,21 @@ public class DynamicClassHelper
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static Type GetPropertyType(string propName, PropertyInfo[] sourceProps)
|
|
|
+ {
|
|
|
+ var propNameArray = propName.Split('.', StringSplitOptions.TrimEntries)
|
|
|
+ .Select(d => d.ToPascalCase())
|
|
|
+ .ToList();
|
|
|
+ if (propNameArray.Count == 1)
|
|
|
+ {
|
|
|
+ return sourceProps.FirstOrDefault(d => d.Name == propNameArray[0])?.PropertyType ?? typeof(string);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var prop = sourceProps.FirstOrDefault(d => d.Name == propNameArray[0]);
|
|
|
+ if (prop == null)
|
|
|
+ return typeof(string);
|
|
|
+ return GetPropertyType(string.Join(".", propNameArray.Skip(1)), prop.PropertyType.GetProperties());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|