自动生成的 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数据框中提取[]括号内的指定字符串并创建一个具有布尔值的新列