2011-06-14 70 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的可空字段。