我第一次开始编写ASP.NET应用程序时采用的一种做法是将[Serializable]属性放在我编写的所有模型/ DTO类上。原因是因为如果将类序列化为Session或Cache对象,则此属性将确保对象序列化正确。
当我没有使用[Serializable]属性时,我很早就被烧了,因为我们的开发环境使用InProc Sessions(单个服务器),因此在Web应用程序部署到生产Web场之前,Serializable问题没有浮出水面使用进程外会话状态。换句话说,序列化错误只会在生产中出现。
我想知道是否仍然是对所有模型/ DTO类使用[Serializable]属性的最佳实践。使用ASP.NET MVC和Web API应用程序时会产生一些副作用。比如处理backing fields。有一些选项可以删除支持字段前缀。不幸的是,当表单在MVC中回发时,这会破坏自动属性映射,因为属性不包含支持字段前缀。
答案 0 :(得分:1)
为了检测序列化失败,即使在开发环境中也要使用proc会话存储。由于会话状态服务,这很容易设置。
当你制作一些限制你在该课程中可以做的事情的[Serializable]
时。例如,您可能不想保留大对象图。选择性序列化似乎是一个更安全的选择。序列化是非常危险和脆弱的。
答案 1 :(得分:0)
不幸的是,当表单在MVC中回发时,这会破坏自动属性映射,因为属性不包含支持字段前缀
你确定绑定因此不起作用吗?
无论如何我通常不使用[serializable]因为MVC / web.api不需要