0

我正在构建一个仅包含一个方法的通知侦听器 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 属性:“格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数时出错http://schemas.datacontract.org /2004/07/MyNamespace:DocuSignEnvelopeInformation。InnerException消息是“第 5 行位置 2162 中的错误。命名空间中的“EndElement”“DocuSignEnvelopeInformation”“ http://schemas.datacontract.org/2004/07/MyNamespace' 不是预期的。期待元素'PropertyChanged'。'。有关详细信息,请参阅 InnerException。”

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

4

1 回答 1

0

这不是问题的完整答案,但对我来说,当我将 XmlSerializerFormat 属性应用到我的 Web 服务方法时,这个问题就消失了,如此处所述。默认的 DataContractFormat 给我带来了几个问题,这个错误就是其中之一。当 nillable 为真时,需要 PropertyChanged 对我来说仍然没有意义。但是对于任何人发现它的价值,XmlSerializerFormat 解决了这个问题以及由默认 DataContractFormat 引起的其他问题。

于 2014-02-25T17:23:54.993 回答