【问题标题】:Set Default Value Of WCF DataMember Property设置 WCF DataMember 属性的默认值
【发布时间】:2012-06-22 18:55:44
【问题描述】:

我想在下面的类中添加一个新属性 bool IsValid。我希望此属性不是必需的,并且默认设置为 false。我将此对象用于 wcf 目的,如何将默认值设置为 false?

[DataContract]
    public class OrderLineItem : IExtensibleDataObject
    {
        ExtensionDataObject IExtensibleDataObject.ExtensionData { get; set; }

        [DataMember]
        public Guid LineItemID { get; set; }

        [DataMember(IsRequired = true, EmitDefaultValue=false)]
        public string ProductID { get; set; }

        [DataMember(IsRequired = true, EmitDefaultValue=false)]
        public decimal Quantity { get; set; }
}

【问题讨论】:

  • 如果您希望它是必需的(即,它必须存在于网络中),默认值是什么并不重要,它将被网络上的内容覆盖。
  • 对不起,它不是必需的,让我改变它
  • 默认为 false [DataMember] public bool IsValid {get;设置;}
  • @HatSoft,你说得对,falsebool 的默认值我没有想到(我的错)。我的答案是针对一般情况,您想设置任意值。如果您发表评论作为答案,您肯定会得到我的支持。

标签: c# wcf


【解决方案1】:

更新:我回答它时考虑了如何为任意类型定义默认值,但是,正如评论中提到的@HatSoft,你不需要做任何事情来设置@987654321 @ 作为 bool 属性的默认值,因为它已经是该类型的默认值。不过,我将把这个答案留给一般情况。

无法设置 [DataMember] 属性本身的默认值,但您可以使用 [OnDeserializing] 回调来设置它。这样,如果它不是来自网络,它将具有反序列化之前运行的代码设置的值。

[DataContract]
public class OrderLineItem : IExtensibleDataObject
{
    ExtensionDataObject IExtensibleDataObject.ExtensionData { get; set; }

    [DataMember]
    public Guid LineItemID { get; set; }

    [DataMember(IsRequired = true, EmitDefaultValue=false)]
    public string ProductID { get; set; }

    [DataMember(IsRequired = true, EmitDefaultValue=false)]
    public decimal Quantity { get; set; }

    [DataMember(IsRequired = false, EmitDefaultValue = false)]
    public bool IsValid { get; set; }

    [OnDeserializing]
    void BeforeDeserialization(StreamingContext ctx)
    {
        this.IsValid = false;
    }
}

【讨论】:

    【解决方案2】:

    默认情况下它将为 false,因此无需执行任何其他操作。

    [DataMember] 
    public bool IsValid { get; set; }
    

    【讨论】:

      【解决方案3】:

      我会建议执行以下操作:

          private string _recordId;
      
          [DataMember]
          public String RecordId
          {
              get { return _recordId ?? (_recordId = Guid.NewGuid().ToString()); }
              set { _recordId = value; }
          }
      

      这里“_recordId = Guid.NewGuid().ToString());”对象为 Guid 时设置默认值

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 2010-12-24
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 2012-04-07
        • 2010-10-16
        相关资源
        最近更新 更多