当我想将一个对象转换为另一个对象时遇到问题,这些模型相同但不同namespace
。
更好地解释我自己,我在一个解决方案中有两个项目,每个项目都有它的模型,其中我有那个重复的模型(AdminModel
)我从那个变量传递Session
并转换它
这是对象的初始模型。
namespace Admin.ModeloAdmin{
public class AdminModel
{
public string devKey { get; set; }
public string mobileKey { get; set; }
public string cuenta { get; set; }
public int idCliente { get; set; }
public int idCuenta { get; set; }
public int idEmpresa { get; set; }
public int regreso { get; set; }
}
}
我想把它转换成这个其他模型
namespace User.ModeloAdmin{
public class AdminModel
{
public string devKey { get; set; }
public string mobileKey { get; set; }
public string cuenta { get; set; }
public int idCliente { get; set; }
public int idCuenta { get; set; }
public int idEmpresa { get; set; }
public int regreso { get; set; }
}
}
但是当我想转换它时,我在以下行中收到错误:
AdminModel sesionManage = (AdminModel) Session["sessionManage"];
如何将数据从一个模型传递到另一个模型?
这是错误消息:
应用程序“/”中的服务器错误。
无法将“AdmixDownloads.Models.AdminModel”类型的对象转换为“DownloadSU.Models.AdminModel”类型。
说明:执行当前 Web 请求的未处理异常。查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidCastException:无法将“AdmixDownloads.Models.AdminModel”类型的对象转换为“DownloadSU.Models.AdminModel”类型。
源代码错误:
第 31 行:否则
第 32 行:{
第 33 行: sessionManage = (AdminModel)HttpContext.Session["sessionManage"];
第 34 行:}
第 35 行:
源文件:C:\Users\juan.gonzalez\Documents\JuanGonzalez\PruebasMVC\AdmixPortal\AdmixDescargas\AdmixDescargas\Areas\DescargaSU\Controllers\InicioController.cs 行:33
堆栈跟踪:
[InvalidCastException:无法将“AdmixDescargas.Models.AdminModel”类型的对象转换为“DescargaSU.Models.AdminModel”类型。] 在 C:\Users\juan.gonzalez\Documents\ 中下载SU.Controllers.InicioController.Index(String Sesion) JuanGonzalez\PruebasMVC\AdmixPortal\AdmixDescargas\AdmixDescargas\Areas\DescargaSU\Controllers\InicioController.cs:33 lambda_method(Closure, ControllerBase, Object[]) +103 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 参数) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 参数) +157 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor,IDictionary`2 参数)+27 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult,ActionInvocation innerInvokeState)+22 System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)+29 System.Web。 Mvc.Async.WrappedAsyncResultBase`1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3d() +50 System.Web.Mvc .Async.<>c__DisplayClass46.b__3f() +225 System.Web.Mvc.Async.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 System.Web.Mvc.Async。AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 System.Web.Mvc.Async.<>c__DisplayClass2b.b__1c() +26 System.Web.Mvc.Async.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult) +100 System.Web.Mvc .Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System. Web.Mvc.Controller.b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 System.Web.Mvc.Controller。EndExecuteCore(IAsyncResult asyncResult)+36 System.Web.Mvc.Controller.b__15(IAsyncResult asyncResult,控制器控制器)+12 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)+22 System.Web.Mvc。 Async.WrappedAsyncResultBase`1.End() +49 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) + 10 System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase`1。 End() +49 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 System.Web.Mvc。+9765121
每个模型都是单独的类,即使它们具有相同的属性,您可以做的是重载您尝试执行的转换类型(我在另一个问题中对此进行了非常肤浅的解释)。
您需要做的是重载要执行强制转换的类中的显式运算符。
在你的情况下,它会是这样的
命名空间 User.ModelAdmin{
}
您对另一个类执行相同的操作,因此您可以从一种类型转换为另一种类型,反之亦然。
这是取自dotnetperls的另一个示例
离开:
选项1:
(我使用 var 在临时变量中推断变量的类型。)
选项 2:
使用自动映射器
我设法以一种不太理想的方式得到了同样的东西。
由于它们实际上是相同的类,所以我只是使用另一个类对其进行序列化然后反序列化。
它并不理想,但它很实用
也许你可以经常使用它,在这些情况下对我有用的是 AutoMapper。 https://github.com/AutoMapper/AutoMapper 如果这不是您经常要做的事情,您可以复制属性。