Tengo el nombre del modelo guardado en mi base de datos. Lo obtengo utilizando cierta consulta. Ahora necesito mantener el nombre del modelo en cierto tipo de variable e instanciarlo dinámicamente. Así que puedo usarlo para un procesamiento posterior. Quiero algo como esto. ¡Por favor ayuda!
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);
}
¡¡Por favor ayuda!!
Respuestas
0 para la respuesta № 1Debe almacenar el nombre completo de su modelo (Namespace.ModelName).
var myObj = Activator.CreateInstance(Type.GetType("NameSpace.Model"));
Espero que esto ayude.
Mira esto .NetFiddle
Déjame saber si todavía tienes problemas.
Actualizar: Digamos que este es tu código.
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);
Ahora puedes crear una instancia de tu modelo de esta manera.
var myObj = Activator.CreateInstance(Type.GetType(modelName)); //(Make sure your modelName include namespace eg. NameSpace.ModelName)
0 para la respuesta № 2
Finalmente resolví esto de esta manera.
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());
}
Gracias a todos los que ayudaron. Puede ayudar a otros.