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

时间:2010-09-27 22:32:34

标签: .net wcf wsdl

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

有没有办法使用statusSpecified工具只创建一个wsdl的字段(即如果不是null,则指定它)? (如果有帮助,我想我可以将wsdl文件更改为Nullable元素。)

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

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

关于WCF,this article指出了使用nillable="true"工具的方向(已经在我的PATH中,所以我可以从wsdl和文件夹中的命令行运行它像这样的xsd文件:svcutil)。不幸的是,使用Nullable类型而不是svcutil *.wsdl *.xsd /language:C#变量,svcutil似乎没有做得更好。

1 个答案:

答案 0 :(得分:0)

否,除非您修改xsd模式。 Read this article about xsd

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

private System.Nullable<bool> x;

private bool xSpecified;

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

private System.Nullable<bool> x;

可空值和指定值之间的差异:

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

希望它会有所帮助:)