2011-06-14 57 views
6

我正在从web服务生成与svcutil的数据合同。svcutil和指定的字段

svcutil /language:cs /noConfig /targetclientversion:Version35 
     /out:Generated\ProductService.cs http://example.com/ProductService.svc?wsdl 

的领域产生如下所示:

private System.Nullable<System.DateTime> createdField; 
private bool createdFieldSpecified; 

领域如何既可空,有一个特定的领域?

+0

该属性是否暴露为DateTime或DateTime? – 2011-06-14 09:13:18

+0

它被暴露为System.Nullable adrianm 2011-06-14 09:46:08

回答

6

它取决于源Wsdl。我敢打赌,有这个东西(不知道语法):

<xsd:element name="created" type="xsd:datetime" minOccurs="0" xsd:nil="true" /> 

svcutil.exe使用nillable产生Nullable<>领域,minOccurs产生场+指定的组合。

我也打赌WSDL不是.Net生成的WSDL!

+0

这正是它的外观。现在我明白了。谢谢。你在.Net上错了。 wsdl中的其他一些东西显示它绝对是.Net服务 – adrianm 2011-06-14 09:49:36

1

类的生成由Web服务的XSD模式驱动。

为了生成空字段。该字段应标记为nillable

<xs:element minOccurs="0" maxOccurs="1" name="created" type="xs:dateTime" nillable="true" /> 

XML将如下所示。

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <created xsi:nil="true" /> 
</root> 

我相信,这一领域在模式是这样的:

<xs:element minOccurs="0" maxOccurs="1" name="created" /> 

,它会完全忽略的元素,则将createdFieldSpecified = false

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
</root> 

底线:Web服务架构应该更新以生成svcutil的可空字段。