4 c#
我收到如下所述的运行时错误.
Message = OutlookAddIn1.DeviceRegistrationRequest无法序列化,因为它没有无参数构造函数.
我很清楚为什么(它在错误消息中说)以及如何解决它(空构造函数的简单添加).我不清楚的是它为什么需要它.我发现了 这个讨论,但它主要是关于MVC,它与我的程序(CRM Dynamics的控制台客户端)无关.
您的类只需要一个无参数的构造函数,因为您正在使用的库(听起来XmlSerializer,可能是间接的)期望并使用该构造函数.这确实是一种非常方便的创建对象的方法,因为它允许:
object obj = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
用法.
然而!这不是所有序列化程序的固有需求:
不,这与 MVC 无关(抱歉,我误读了你的帖子)。它仅涉及普通的 C#'py 对象创建。你看,以这个类为例:
public class Why {
public Why(int x, int y) { }
}
Run Code Online (Sandbox Code Playgroud)
当要反序列化和构造对象时,反序列化器如何知道要传递什么?他猜不出来。因此,框架要求可序列化对象必须具有无参数构造函数,因此“仅创建”是安全的,并且您有责任通过属性设置整个状态。
注意:顺便说一句 - 请注意构造函数不必是 public。大多数序列化器都可以很好地使用私有无参数构造函数,或者根本不需要,如果它们实现为使用未初始化的对象构造,则至少可以从 .Net 完整配置文件中的 Reflection 获得该构造函数。
| 归档时间: |
|
| 查看次数: |
11864 次 |
| 最近记录: |