如何从WSDL创建Nullable字段/变量而不是额外的字段/变量

Pat*_*Pat 6 .net wcf wsdl

我使用wsdl.exe将WSDL文件和Types.xsd文件转换为C#文件.wsdl文件指定可选变量(minOccurs="0" maxOccurs="1"),生成的.NET类型通过创建两个字段来处理它 - 一个用于变量(例如status),另一个用于告知您是否指定了(statusSpecified).

有没有办法使用该wsdl工具只创建一个字段Nullable(即如果不是null,则指定)?(如果有帮助,我想我可以更改wsdl文件以获取nillable="true"元素.)

是否有一个不同的,更好的工具将从WSDL生成.NET类型?我使用的是.NET 4,因此如果生成的类型利用了Nullable类型等功能,那将非常有用.

注意:我刚刚意识到我正在使用.NET 2中的wsdl工具,并且较新的项目应该使用WCF来完成这些工作.WCF上的任何指针都可以获得我想要的东西吗?

关于WCF,本文指出了使用该svcutil工具的方向(已经在我的PATH中,所以我可以从文件夹中的命令行运行它与wsdl和xsd文件,如下所示:) svcutil *.wsdl *.xsd /language:C#.不幸的是,使用Nullable类型而不是xSpecified变量,svcutil似乎没有做得更好.

3lv*_*naz 1

不,除非您修改 xsd 架构。 阅读这篇关于 xsd 的文章

如果您有元素minOccurs="0"nillable="true"它仍然会生成 xSpecified 字段。

private System.Nullable<bool> x;

private bool xSpecified;
Run Code Online (Sandbox Code Playgroud)

如果您希望字段可为空,则 xsd 中的元素需要minOccurs="1"nillable="true"

private System.Nullable<bool> x;
Run Code Online (Sandbox Code Playgroud)

可空和指定之间的区别:

  • 如果字段可为空,则即使字段为空也会被序列化:<minzero xsi:nil="true"><minzero>
  • 如果指定的字段为 false。那么字段将不会被序列化。

希望能帮助到你 :)