在 .NET 中忽略序列化的 XSD 顺序
Ignoring XSD Sequence Order on Serialization in .NET
我正在 .NET 中使用第 3 方 Web 服务(我无法控制其中的服务)。
我注意到 我的某些 属性在返回响应并从服务序列化时未设置。
不过我注意到他们的反应有些奇怪。
这是他们的 WSDL 示例
<xs:complexType name="letters">
<xs:complexContent>
<xs:extension base="tns:response">
<xs:sequence>
<xs:element name="a" type="xs:long" />
<xs:element minOccurs="0" name="b" type="xs:dateTime" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="c" nillable="true" type="tns:anotherComplexType" />
<xs:element minOccurs="0" name="d" type="xs:dateTime" />
<xs:element minOccurs="0" name="e" type="tns:string" />
<xs:element minOccurs="0" name="f" type="tns:boolean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
这是响应相关部分的示例:
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<f>true</f>
</letters>
我怀疑因为他们正在为 <letters>
部分中的元素定义 <xs:sequence>
,所以 .NET 序列化程序期望响应具有 ALL 响应中存在的元素? (因此,他们的响应打破了他们的 WSDL 定义?)。
谢谢
编辑
似乎响应正在返回一个未知元素,特别是
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<otherElement>blue</otherElement>
<f>true</f>
</letters>
这不是 WSDL 的一部分。这意味着 <f>
元素没有被序列化。有什么方法可以忽略未知元素吗?
不,xsd:sequence
仅仅意味着元素必须是有序的。每个 xs:element
上的 @minOccurs
属性指示必需性。 当@minOccurs = 0
时,该元素是可选的。(注意@minOccurs
和@maxOccurs
的默认值是1
,表示"required".) 由于该序列中的许多元素都是 @minOccurs = 0
,因此您的响应中不必包含所有元素。
我正在 .NET 中使用第 3 方 Web 服务(我无法控制其中的服务)。
我注意到 我的某些 属性在返回响应并从服务序列化时未设置。
不过我注意到他们的反应有些奇怪。
这是他们的 WSDL 示例
<xs:complexType name="letters">
<xs:complexContent>
<xs:extension base="tns:response">
<xs:sequence>
<xs:element name="a" type="xs:long" />
<xs:element minOccurs="0" name="b" type="xs:dateTime" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="c" nillable="true" type="tns:anotherComplexType" />
<xs:element minOccurs="0" name="d" type="xs:dateTime" />
<xs:element minOccurs="0" name="e" type="tns:string" />
<xs:element minOccurs="0" name="f" type="tns:boolean" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
这是响应相关部分的示例:
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<f>true</f>
</letters>
我怀疑因为他们正在为 <letters>
部分中的元素定义 <xs:sequence>
,所以 .NET 序列化程序期望响应具有 ALL 响应中存在的元素? (因此,他们的响应打破了他们的 WSDL 定义?)。
谢谢
编辑 似乎响应正在返回一个未知元素,特别是
<letters>
<a>0</a>
<b>2015-02-03T11:59:18+11:00</b>
<d>2015-02-03T12:00:00+11:00</d>
<otherElement>blue</otherElement>
<f>true</f>
</letters>
这不是 WSDL 的一部分。这意味着 <f>
元素没有被序列化。有什么方法可以忽略未知元素吗?
不,xsd:sequence
仅仅意味着元素必须是有序的。每个 xs:element
上的 @minOccurs
属性指示必需性。 当@minOccurs = 0
时,该元素是可选的。(注意@minOccurs
和@maxOccurs
的默认值是1
,表示"required".) 由于该序列中的许多元素都是 @minOccurs = 0
,因此您的响应中不必包含所有元素。