public void Initialize(DbInstance db) { // simple or already known type DbType = DbTypes.TryGetDbType(MemberType); if (DbType != null) { return; } // reference { var key = db.GetKeyType(MemberType); if (key != null) { DbType = DbTypes.GetDbType(key); return; } } // dictionary of references { var elements = DbTypes.GetDictionaryElementTypes(MemberType); if (elements != null) { var key = db.GetKeyType(elements.Item1) ?? elements.Item1; var value = db.GetKeyType(elements.Item2) ?? elements.Item2; DbType = DbTypes.GetDbType(typeof(Dictionary <,>).MakeGenericType(key, value)); return; } } // collection of references { var element = DbTypes.GetCollectionElementType(MemberType); if (element != null) { var key = db.GetKeyType(element); if (key != null) { DbType = DbTypes.GetDbType(key.MakeArrayType()); return; } } } throw new NotSupportedException(string.Format("Serialization of '{0}' is not supported", MemberType)); }