谁能告诉我如何在 WCF 中创建 Datacontract 的对象。我有一个应用程序,我需要一个构造函数,但是在客户端,当我创建一个对象时,它不显示构造函数。我知道一个解决方案,比如添加一个包含构造函数的分部类。这里的混淆是“在哪里添加分部类”
请有人帮助我.........我是 C# 和 .net 的新手。
最佳答案
有两种方法可以为 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
}
}
}
只要文件编译正常,剩下的就由编译器来做。
但是,在不知道构造函数的必要性的情况下,可能值得指出的是,在客户端反序列化对象时不会调用构造函数,因为对象不是这样“构造”的。
http://mehranikoo.net/CS/archive/2007/11/09/DataContractConstructorsInWCF.aspx与反序列化过程中发生的事情以及如何影响它有关。只是我通过艰难的方式学到的东西.. 使用甚至不支持 OnDeserialization 属性的 silverlight。
关于c# - wcf 中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751074/