2

我有一个名为“accountNumber”的字符串字段作为 Web 服务中使用的对象的一部分。我需要这个字段,minOccurs="1"没有 nillable="true"。如果我将该字段定义为,<XmlElement(IsNullable:=True)>那么我得到minOccurs="1"and nillable="true"。如果我定义<XmlElement(IsNullable:=False)>那么我没有得到nillable="true",但我得到minOccurs="0"了。

那么,我如何定义我的对象以在我的 XSD 中获取它:

<s:element minOccurs="1" maxOccurs="1" name="accountNumber" type="s:string" />

我的类定义很简单:

<Serializable()> _
<XmlType(Namespace:="http://mysite.org")> _
Public Class MyServiceWS
    'some other definitions
    <XmlElement(IsNullable:=True)> <VBFixedString(64)> Public accountNumber As String
End Class

感谢您的任何帮助。


编辑 2012 年 10 月 16 日:逆向工程 XSD


我使用以下字段对 XSD 进行了逆向工程:

<xs:element name="TEST1" minOccurs="1" maxOccurs="1" type="xs:string"/>
<xs:element name="TEST2" minOccurs="0" maxOccurs="1" type="xs:string"/>
<xs:element name="TEST3" minOccurs="1" maxOccurs="1" nillable="true" type="xs:string"/>
<xs:element name="TEST4" minOccurs="0" maxOccurs="1" nillable="false" type="xs:string"/>

我使用了以下命令:xsd.exe MyClass.xsd /classes /language:vb /f

产生了以下结果:

'''<remarks/>
Public TEST1 As String

'''<remarks/>
Public TEST2 As String

'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(IsNullable:=true)>  _
Public TEST3 As String

'''<remarks/>
Public TEST4 As String

从这个结果来看,似乎无法做到我想要完成的事情。


编辑 2012 年 10 月 17 日:发现一篇有类似问题的帖子


对于所有对这个问题感兴趣的人,我发现了一个类似问题的帖子。没有提供解决方案。

如何使 dotnet webservice 在字符串值上设置 minOccurs=“1”

4

2 回答 2

0

据我所知,我所要求的无法通过 .NET 实现自动化。我将不得不手动更改 WSDL。

于 2013-01-04T17:36:46.120 回答
0

我在另一个有同样问题的线程上发布了详细的答案:How to make a dotnet webservice set minOccurs=“1” on a string value

然而,简短的回答是否定的。字符串类型是不可能的。

字符串类型有一个默认值String.Empty,并且 minOccurs 不会设置为 1 ,除非没有默认值(这只能使用IsNullable = true字符串)。

于 2013-06-06T20:09:43.880 回答