Wcf 当SOAP中没有PropertyChanged节点时,为什么INotifyPropertyChanged对象的反序列化失败?

Wcf 当SOAP中没有PropertyChanged节点时,为什么INotifyPropertyChanged对象的反序列化失败?,wcf,web-services,xml-nil,Wcf,Web Services,Xml Nil,我正在构建一个通知侦听器web服务,它只包含一个方法,该方法将接收一个预定义对象作为该方法的唯一参数。我有一个对发送方API的服务引用,其中定义了此对象及其组件对象,并且在服务引用的自动生成代码中,大多数或所有对象实现System.ComponentModel.INotifyPropertyChanged。因此,每个都有一个PropertyChanged成员,它在我的WSDL中显示如下: <xs:complexType name="DocuSignEnvelopeInformation"&

我正在构建一个通知侦听器web服务,它只包含一个方法,该方法将接收一个预定义对象作为该方法的唯一参数。我有一个对发送方API的服务引用,其中定义了此对象及其组件对象,并且在服务引用的自动生成代码中,大多数或所有对象实现System.ComponentModel.INotifyPropertyChanged。因此,每个都有一个PropertyChanged成员,它在我的WSDL中显示如下:

<xs:complexType name="DocuSignEnvelopeInformation">
    <xs:sequence>
        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.ComponentModel" name="PropertyChanged" nillable="true" type="q1:PropertyChangedEventHandler"/>
        ...
    </xs:sequence>
</xs:complexType>

...
我不知道为什么这些对象需要实现INotifyPropertyChanged,而调用我的侦听器服务的通知服务从不发送这个PropertyChanged元素,这应该很好,因为PropertyChanged具有nillable=“true”属性。但由于某些原因,每次都会抛出一个错误,指示它必须具有PropertyChanged属性:“格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数时出错。InnerException消息是“第5行位置2162处出错”命名空间“”中的EndElement“”docusingEnvelopeInformation“”不应为空。应为元素'PropertyChanged'。有关详细信息,请参阅InnerException。“


如果元素“PropertyChanged”被标记为nillable,为什么它会期望它呢?从我的阅读来看,nillable意味着该属性在xml中是可选的。这不是真的吗?

这不是问题的完整答案,但对我来说,当我将XmlSerializerFormat属性作为des应用于我的web服务方法时,这个问题就消失了cribed。默认DataContractFormat给我造成了几个问题,其中一个错误就是这个错误。对于我来说,当nillable为true时需要PropertyChanged仍然没有意义。但是对于任何发现这个问题的人来说,XmlSerializerFormat都解决了这个问题以及默认DataContract导致的其他问题格式