我的WCF REST服务正在发生一个奇怪的问题。对于接受数据的操作,假设它接受Foo类:

[WebInvoke(Method = "PUT", UriTemplate = "users/{username}")]
[OperationContract]
public void UpdateLoginUser(string username, LoginUser userUpdated) {
[...]
}

现在,我的LoginUser类继承自NormalUser类:
<DataContract()> _
Public MustInherit Class NormalUser
[...]
End Class

Public Class LoginUser
 Inherits NormalUser
[...]
End Class

当我将服务放置到服务中时,触发UpdateLoginUser,一切正常。但是,如果我将DataContract应用于我的NormalUser类:
<DataContract()> _
Public Class LoginUser
 Inherits NormalUser
[...]
End Class

...突然之间,在反序列化过程中LoginUser类的构造函数不会触发!我有要运行的业务登录规则。那么,为什么当我将DataContract属性应用于继承的类时,其构造函数停止被激发?我该如何解决?如果要更改 namespace 或名称,则需要应用DataContract属性。

最佳答案

DataContractSerializer 不调用契约(Contract)的构造函数。如果要让方法在反序列化时运行,请使用 OnDeserializing attrbute装饰它:



您的另一个选择是use XmlSerializer with WCF:

10-04 23:03