繁体   English   中英

设置WCF DataMember属性的默认值

[英]Set Default Value Of WCF DataMember Property

我想在下面的班级中添加一个新属性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; }
}

更新 :我回答它考虑如何为任意类型定义默认值,但是,正如评论中提到的@HatSoft,您不需要做任何事情来将false设置为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;
    }
}

默认情况下它将是false,因此不需要做任何其他事情。

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

我建议做以下事情:

    private string _recordId;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM