ModelMeta TypeToModelMeta(Type type) { var serializeAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "SerializeAttribute"); var cacheAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "MainCacheAttribute"); var persistenceAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "PersistenceAttribute"); var props = cacheAttribute?.GetType().GetProperties(); var fields = cacheAttribute?.GetType().GetFields(); var modelMeta = new ModelMeta() { Type = type, Serialize = serializeAttribute != null, RedisCacheName = (string)cacheAttribute?.GetType().GetProperty("CacheName").GetValue(cacheAttribute, null), MysqlTableName = (string)persistenceAttribute?.GetType().GetProperty("DbTableName").GetValue(persistenceAttribute, null), }; modelMeta.Fields = type.GetFields().Select((f, p) => FieldToMeta(modelMeta, f, p)).ToList(); if (cacheAttribute != null || persistenceAttribute != null) { modelMeta.Key = modelMeta.Fields.FirstOrDefault( f => f.Field.GetCustomAttributes(true).Any(a => a.GetType().Name == "KeyAttribute")); } return(modelMeta); }
FieldMeta FieldToMeta(ModelMeta model, FieldInfo field, int pos) { if (field.IsPublic) { var serializeAttribute = field.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "FieldIndexAttribute"); return(new FieldMeta() { Field = field, ModelMeta = model, Position = (uint)pos + 1, SerializeIndex = (uint)(serializeAttribute != null? (byte)serializeAttribute.GetType().GetProperty("Index").GetValue(serializeAttribute, null):0), }); } return(null); }
FieldMeta FieldToMeta(ModelMeta model, FieldInfo field, int pos) { if (field.IsPublic) { var serializeAttribute = field.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "FieldIndexAttribute"); return new FieldMeta() { Field = field, ModelMeta = model, Position = (uint)pos + 1, SerializeIndex = (uint)(serializeAttribute!=null? (byte)serializeAttribute.GetType().GetProperty("Index").GetValue(serializeAttribute, null):0), }; } return null; }
ModelMeta TypeToModelMeta(Type type) { var serializeAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "SerializeAttribute"); var cacheAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "MainCacheAttribute"); var persistenceAttribute = type.GetCustomAttributes() .FirstOrDefault(attr => attr.GetType().Name == "PersistenceAttribute"); var props = cacheAttribute?.GetType().GetProperties(); var fields = cacheAttribute?.GetType().GetFields(); var modelMeta = new ModelMeta() { Type = type, Serialize = serializeAttribute!=null, RedisCacheName = (string)cacheAttribute?.GetType().GetProperty("CacheName").GetValue(cacheAttribute, null), MysqlTableName = (string)persistenceAttribute?.GetType().GetProperty("DbTableName").GetValue(persistenceAttribute, null), }; modelMeta.Fields = type.GetFields().Select((f,p) => FieldToMeta(modelMeta, f, p)).ToList(); if (cacheAttribute != null || persistenceAttribute != null) { modelMeta.Key = modelMeta.Fields.FirstOrDefault( f => f.Field.GetCustomAttributes(true).Any(a => a.GetType().Name == "KeyAttribute")); } return modelMeta; }