.net - 防止 svcutil 生成 "EmitDefaultValue=false"属性

标签 .net wcf web-services svcutil.exe

我最近一直在尝试使用 svcutil 从 xsd 文件生成数据契约,如下所示:

svcutil.exe /t:code /dconly /out:MyContract.cs /n:*,My.Namespace MyDataDefinition.xsd

XSD 主要由如下定义组成:

<xsd:complexType name="SomeComplexObjectType">
    <xsd:sequence>
        <xsd:element name="FirstData" type="xsd:string" minOccurs="0" />
        <xsd:element name="SecondData" type="xsd:string" minOccurs="0" />
    </xsd:sequence>
</xsd:complexType>

svcutil 生成如下内容:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="SomeComplexObjectType")]
public partial class PersonInfo : object, System.Runtime.Serialization.IExtensibleDataObject
{
    private string FirstDataField;
    private string SecondDataField;

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
    public string FirstData
    {
        get
        {
            return this.FirstDataField;
        }
        set
        {
            this.FirstDataField= value;
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
    public string SecondData
    {
        get
        {
            return this.SecondDataField;
        }
        set
        {
            this.SecondDataField= value;
        }
    }
}

这工作正常,但是,“EmitDefaultValue=false”属性不是必需的。更不用说它在 wsdl 中引入了很多噪音,添加了如下内容:

<xsd:element minOccurs="0" name="FirstData" nillable="true" type="xsd:string">
    <xsd:annotation>
        <xsd:appinfo>
            <DefaultValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/" EmitDefaultValue="false"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>

目前我只是手动编辑生成的合约,但从维护的角度来看这并不理想。

有谁知道如何防止 svcutil 自动生成这些 EmitDefaultValue=false 属性?

最佳答案

请参阅this article

On schema import, the EmitDefaultValue property is automatically set to false whenever the WCF-specific annotation mentioned previously is detected. It is also set to false for reference types that have the nillable property set to false to support specific interoperability scenarios that commonly occur when consuming ASP.NET Web services

看来您唯一的选择是修改传入的架构,以便相关元素可以为空。

关于.net - 防止 svcutil 生成 "EmitDefaultValue=false"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794325/

相关文章:

web-services - 关于如何尽可能有效地处理集契约(Contract)时仍符合 REST 原则的 REST API 问题

c# - 将数组 Json 发布到 .net 核心 web api Controller

c# - 事件处理程序或回调

.net - 有没有办法在使用 System.IO.Compression.GZipStream 时设置压缩级别

wcf - 控制 WCF XmlSerializer

c# - Web 服务返回具有空字段的对象

c# - DataGrid 在自动生成列时在代码后面设置列的大小

c# - 通过 WCF 更新应用程序

wcf - 4.0/WCF : Best approach for bi-idirectional message bus?

java - 无法使我的Web服务与tomcat和axis2一起使用