C# 服务引用不创建';指定的';DateTime的属性
我已经为soapweb服务添加了一个服务引用。WSDL包含一些dateTime元素,如:C# 服务引用不创建';指定的';DateTime的属性,c#,.net,web-services,soap,visual-studio-2013,C#,.net,Web Services,Soap,Visual Studio 2013,我已经为soapweb服务添加了一个服务引用。WSDL包含一些dateTime元素,如: <xsd:element minOccurs="0" name="plannedStartDate" type="xsd:dateTime"/> <xsd:element minOccurs="0" name="plannedEndDate" type="xsd:dateTime"/> 等。VS2013生成了一个具有(不可为null)DateTime类型属性的类,但未添加指定的
<xsd:element minOccurs="0" name="plannedStartDate" type="xsd:dateTime"/>
<xsd:element minOccurs="0" name="plannedEndDate" type="xsd:dateTime"/>
等。VS2013生成了一个具有(不可为null)DateTime类型属性的类,但未添加指定的plannedStartDateSpecified等属性。因此,我没有选择跳过发送它们中的任何一个。如果我将生成的代码修改为可空DateTime?属性,它在这些字段中发送null,而远程系统按照我的预期将值置空。我需要完全跳过发送输入元素
创建Web引用确实会产生“指定”属性,这允许我跳过发送可选元素,一切都很好
有什么想法吗?我希望使用服务引用在使用服务的库中保持所有内容的一致性。我将拭目以待,看看是否有人有更聪明的答案,但我将svcutil.exe与XmlSerializer结合使用,并包装如下
svcutil /serializer:XmlSerializer /namespace:*,<desired_namespace_for_generated_class> /wrapped <path_to_WSDL>
svcutil/serializer:XmlSerializer/namespace:*,/wrapped
为方便起见,在app.config中,我像往常一样在Visual Studio中为相同的WSDL添加了一个常规服务引用,然后将VS生成的Reference.cs的内容替换为从svcutil.exe生成的文件的内容。现在我有了*指定的字段,一切都按照我希望的方式运行
是的,编辑生成的代码不太合乎礼仪,但这是一个已发布的、版本化的web服务。因此,我预计不必更新服务引用(从而将其弄糟)。另一个解决方案可以在这里找到:
(将
true
添加到生成的Reference.svcmap文件中的元素ClientOptions
)作为替换生成内容的替代方法,您可以通过将svcmap文件的“”元素编辑为“XmlSerializer”,将服务引用切换到XmlSerializer。一般来说,请尝试用网站内容回答,而不仅仅是一个链接,以防该链接在将来失效。