Beispiel #1
0
        private object DeserializeImpl(Type type, IDatabaseDataReader reader, bool isEnumerable)
        {
            if (IsEnumerable(type) && type.IsGenericType)
            {
                return(DeserializeImpl(type.GetGenericArguments()[0], reader, true));
            }

            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .Where(p => !p.GetGetMethod().IsVirtual);

            var entities = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(type));

            // TODO add deserializing of structs...

            while (reader.MoveNext())
            {
                var entityInstance = Activator.CreateInstance(type);
                properties.Each(p => p.SetValue(entityInstance, reader.Read(p.PropertyType, p.Name)));

                if (modelDataStorage_.TryGetValue(entityInstance.GetType(), out _))
                {
                    entityInstance = stateManager_.GetOrAddEntity(entityInstance);
                }

                entities.Add(entityInstance);
            }

            return(!isEnumerable ? (entities.Count > 0 ? entities[0] : null) : entities);
        }
Beispiel #2
0
 public void LoadFrom(IDatabaseDataReader reader)
 {
     Id   = reader.GetValue <uint>("CONFIG_ID");
     Name = reader.GetValue <string>("CONFIG_NAM");
     Data = reader.GetValue <string>("CONFIG_DATA");
 }
Beispiel #3
0
 public T Deserialize <T>(IDatabaseDataReader reader)
 => (T)DeserializeImpl(typeof(T), reader, false);
 public IndexedWebApi(IDatabaseDataReader reader, MetadataSchema md)
 {
     _reader = reader;
     _md     = md;
 }