【问题标题】:What to use in stead of DataMember(EmitDefaultValue=false) in .Net Core 3.1?在 .Net Core 3.1 中使用什么代替 DataMember(EmitDefaultValue=false)?
【发布时间】:2020-03-25 10:56:38
【问题描述】:

我正在为 WCF 服务编写 .NET Core 3.1 客户端。我用 svcutil 生成了一个客户端。 reference.cs 中的所有成员都具有以下属性:

[System.Xml.Serialization.XmlElementAttribute("property.name", IsNullable = true, Order = 0)]

一些元素为空时不应在消息中序列化,即: 目前包含所有元素:

<criteria>
  <criteria1 xsi:nil="true"/>
  <criteria2>1</criteria2>
  <criteria3 xsi:nil="true"/>
</criteria>

想要的结果:

<criteria>
  <criteria2>1</criteria2>
</criteria>

在 .Net Framework 中,我能够添加属性 [DataMember(EmitDefaultValue=false)] 以获得正确的行为,这在 .NET Core 中不受支持。

【问题讨论】:

    标签: wcf .net-core


    【解决方案1】:

    据我所知,DotNet Core 支持 EmitDefaultValue。
    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datamemberattribute.emitdefaultvalue?view=netframework-4.8
    我们可以在位于Reference.cs 文件中的数据协定中使用该属性来装饰数据成员。

       [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue =false)]
        public int Id
        {
            get
            {
                return this.IdField;
            }
            set
            {
                this.IdField = value;
            }
        }
    

    如果有什么我可以帮忙的,请随时告诉我。

    【讨论】:

    • 添加 datamember 属性对我没有任何作用,生成的 xml 仍然有空元素。
    【解决方案2】:

    我找到了解决办法,使用 System.Xml.Serialization.XmlElementAttribute 时存在问题,它不能与 DataMember 结合使用。不使用 XmlElementAttribute 序列化空值的解决方案在这里找到:Suppress Null Value Types from Being Emitted by XmlSerializer

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多