我在wsdl中有以下类型(它由第三方工具生成):
<xsd:complexType name="IntArray">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Elements" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
有时Visual Studio会生成:
public class IntArray : System.Collections.Generic.List<int> {}
Run Code Online (Sandbox Code Playgroud)
有时它不会为此wsdl生成任何代理类型,只使用int [].
Web Service配置中的集合类型是System.Array.
这种可预测行为的原因是什么?
编辑:
我发现了如何重现这种行为的方式.
例如,我们有两种类型:
<xsd:complexType name="IntArray">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Elements" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="StringArray">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Elements" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
VS生成:
public class IntArray : System.Collections.Generic.List<int> {}
public class StringArray : System.Collections.Generic.List<string> {}
Run Code Online (Sandbox Code Playgroud)
现在我改变StringArray类型:
<xsd:complexType name="StringArray">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Elements" type="xsd:string" />
<xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="lax" />
</xsd:sequence>
<xsd:anyAttribute namespace="##any" processContents="lax"/>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
VS仅为StringArray生成代理类型.但不适用于IntArray.
编辑:
Reference.svcmap:
<ClientOptions>
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
<EnableDataBinding>true</EnableDataBinding>
<ExcludedTypes />
<ImportXmlTypes>false</ImportXmlTypes>
<GenerateInternalTypes>false</GenerateInternalTypes>
<GenerateMessageContracts>false</GenerateMessageContracts>
<NamespaceMappings />
<CollectionMappings />
<GenerateSerializableTypes>true</GenerateSerializableTypes>
<Serializer>Auto</Serializer>
<ReferenceAllAssemblies>true</ReferenceAllAssemblies>
<ReferencedAssemblies />
<ReferencedDataContractTypes />
<ServiceContractMappings />
</ClientOptions>
Run Code Online (Sandbox Code Playgroud)
如果您查看项目的所有文件,然后查看名为Reference.svcmap的文件以获取相应的服务参考,请告诉我xml中的以下配置选项是什么?
<ExcludedTypes />
<ImportXmlTypes>false</ImportXmlTypes>
<GenerateInternalTypes>false</GenerateInternalTypes>
<GenerateSerializableTypes>false</GenerateSerializableTypes>
<Serializer>Auto</Serializer>
Run Code Online (Sandbox Code Playgroud)
很抱歉把它作为一个答案,但在评论中它是非常难以理解的.
编辑
好的,这里发生的事情如下:
在您的情况下,添加xsd:any元素会导致序列化模式发生更改.如果需要一致的序列化,则必须删除禁用元素或强制代理生成始终使用XmlSerialization.
以下是有关DataContractSerializer的允许架构元素的链接.
干杯 - 大声
归档时间: |
|
查看次数: |
2312 次 |
最近记录: |