自动生成的 WCF 代码具有布尔值,具有“指定”附加字段

Posted

技术标签:

【中文标题】自动生成的 WCF 代码具有布尔值,具有“指定”附加字段【英文标题】:Auto generated WCF code has Boolean have a "Specified" additional field 【发布时间】:2021-04-06 03:35:31 【问题描述】:

给定一个包含简单日期时间字段的 WSDL 定义,定义如下:

<xs:sequence>
    <xs:element minOccurs="0" name="endDate" type="xs:dateTime"/>
</xs:sequence>

使用内置的tool添加服务引用

生成的代码有一个未在 WSDL 中定义的新“指定”字段

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.4084.0")]
.. removed fluff..
public partial class Foo 
    private System.DateTime endDateField;     // Normal field   
    private bool endDateFieldSpecified;       // New Unknow field

当旧的生成代码是这样的:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
.. removed fluff..
public partial class Foo 
    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private System.DateTime endDateField;

如果新的“指定”字段未设置为 true。该属性未序列化。 Soap Trace 中缺少该信息。

此问题与 VS 版本无关,也与更新无关。 文件头显示两个生成的代码相同的版本:

运行时版本:4.0.30319.42000

【问题讨论】:

【参考方案1】:

问题来自服务引用的配置。 取消勾选“在引用的程序集中重用类型”将产生这个新的“指定”字段。

制作以前可以工作的工作代码,在这里你正确地初始化了你的属性。 变成没有错误的不工作代码,但是每个原始类型的值在 SOAP Trace 中的序列化时都会丢失。

为了修复该重用类型,如下图所示。enter image description here

如果您选择不在 purpuse 上重用类型,以便从自动生成的代码中排除某些库。仅排除图片第二个选项中的那些。

【讨论】:

这个问题很容易重现到reference.cs生成的代码。并勾选和取消勾选这个东西。

以上是关于自动生成的 WCF 代码具有布尔值,具有“指定”附加字段的主要内容,如果未能解决你的问题,请参考以下文章

Python如何在pandas数据框中提取[]括号内的指定字符串并创建一个具有布尔值的新列

如何为具有共享类型的多个 WCF 服务生成客户端代码

xsd生成的Java代码中的布尔值

svcutil.exe 未为 minOccurs=0 生成指定字段

具有多个值的张量的布尔值在 Pytorch 中不明确

删除具有绑定布尔值的列表项 - SwiftUI