有两种方法可以为DataContract类提供构造函数.可能最一致的方法是将DataContract移动到您在服务和客户端中引用的单独的类库中.正如John Saunders所述,有一种方法可以在为引用的服务生成代理代码时告诉Visual Studio使用现有的类.在此之后,您可以正常地将构造函数添加到该类.
如果希望构造函数仅出现在客户端或由于某些其他原因而无法使用共享类库,则可以创建分部类.这类课程确实没有明确的"位置".通过分部类提供构造函数所需的只是创建一个新的类文件,该文件定义与代理相同的类.
因此,假设您有一个代理类ReferencedServiceProxy.ContractClass,您需要创建一个定义分部类的新代码文件
namespace ReferencedServiceProxy
{
partial class ContractClass
{
// Constructor. Naturally the constructor cannot overwrite one
// defined in the proxy class already. Not sure if those define
// a default constructor.
public ContractClass()
{
// Implementation
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要文件正常编译,编译器就会完成剩余的工作.
但是,在不知道需要构造函数的情况下,可能值得指出的是,在客户端反序列化对象时不会调用构造函数,因为对象不是"构造"的.
http://mehranikoo.net/CS/archive/2007/11/09/DataContractConstructorsInWCF.aspx与反序列化过程中发生的事情以及如何影响它有关.只是我学到了很难的东西..使用silverlight甚至不支持OnDeserialization属性.