/ / Come istanziare un modello il cui nome è ottenuto dinamicamente dal database in c # mvc-c #, asp.net-mvc

come istanziare un modello il cui nome è ottenuto dinamicamente dal database in c # mvc-c #, asp.net-mvc

Ho il nome del modello salvato nel mio database. Lo ottengo usando determinate query. Ora ho bisogno di tenere il nome del modello in un certo tipo di variabile e di istanziarlo dinamicamente. Così posso usarlo per ulteriori elaborazioni. Voglio qualcosa di simile. Per favore aiuto!

public string Checker(int Id)
{
var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

MakerCheckerModel mcmodel = new MakerCheckerModel();

mcmodel.OldJson = jsonOLD.OldJson;
mcmodel.NewJson = jsonNEW.NewJson;
mcmodel.ModelName = modelName.ModelName;
var modelname = mcmodel.ModelName;


UserModel olduser = JsonConvert.DeserializeObject<UserModel>(mcmodel.OldJson);
//The way usermodel is hardcoded here. I need it to be dynamic. So that It can work for several data.Something Like this.
mcmodel.ModelName olduser = JsonConvert.DeserializeObject<mcmodel.ModelName>(mcmodel.OldJson);
}

Per favore aiuto!!

risposte:

0 per risposta № 1

È necessario memorizzare il nome completo del modello (Namespace.ModelName).

 var myObj = Activator.CreateInstance(Type.GetType("NameSpace.Model"));

Spero che questo aiuto.

Controllare questo .NetFiddle

Fammi sapere se hai ancora problemi

Aggiornare: Lascia che questo sia il tuo codice

var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

Ora puoi creare l'istanza del tuo modello in questo modo.

var myObj = Activator.CreateInstance(Type.GetType(modelName)); //(Make sure your modelName include namespace eg. NameSpace.ModelName)

0 per risposta № 2

Ho finalmente risolto questo in questo modo.

  public string Checker(int Id)
{


var dataContext = new PetaPoco.Database("MessageEntity");
var jsonOLD = dataContext.SingleOrDefault<OldData>("Select OldJson from MakerChecker2 where MakerCheckerId=@0", Id);
var jsonNEW = dataContext.SingleOrDefault<NewData>("Select NewJson from MakerChecker2 where MakerCheckerId=@0", Id);
var modelName = dataContext.SingleOrDefault<NameOfModel>("Select ModelName from MakerChecker2 where MakerCheckerId=@0", Id);

MakerCheckerModel mcmodel = new MakerCheckerModel();

mcmodel.OldJson = jsonOLD.OldJson;
mcmodel.NewJson = jsonNEW.NewJson;
mcmodel.ModelName = modelName.ModelName;
var modelname = mcmodel.ModelName;
string fullName = "MessageCompose.Models." + modelname;
Type type = Type.GetType(fullName);
Object obj = (Activator.CreateInstance(type));

dynamic olduser = JsonConvert.DeserializeObject(mcmodel.OldJson,obj.GetType());
dynamic newuser = JsonConvert.DeserializeObject(mcmodel.NewJson,obj.GetType());
}

Grazie a tutti coloro che hanno aiutato. Può aiutare gli altri