【问题标题】:How to create Nullable fields/variables from WSDL instead of extra fields/variables如何从 WSDL 创建 Nullable 字段/变量而不是额外的字段/变量
【发布时间】:2010-09-27 22:32:34
【问题描述】:

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

有没有办法使用wsdl 工具只创建一个Nullable 字段(即如果不为空,则指定)? (如果有帮助,我想我可以将 wsdl 文件更改为包含 nillable="true" 元素。)

是否有其他更好的工具可以从 WSDL 生成 .NET 类型?我使用的是 .NET 4,因此如果生成的类型利用了 Nullable 类型等功能,那将会很有用。

注意:我刚刚意识到我正在使用 .NET 2 中的 wsdl 工具,并且较新的项目应该使用 WCF 来处理这些东西。关于 WCF 获得我想要的方式的任何指针?

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

【问题讨论】:

    标签: .net wcf wsdl


    【解决方案1】:

    不,除非您修改您的 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;
    

    可为空和指定的区别:

    • 如果字段可以为空,那么即使字段为空也会被序列化:&lt;minzero xsi:nil="true"&gt;&lt;minzero&gt;
    • 如果指定的字段为假。那么字段将不会被序列化。

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2013-06-26
      相关资源
      最近更新 更多