4

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

3 回答 3

12

更新:我回答它时考虑了如何为任意类型定义默认值,但是,正如评论中提到的@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;
    }
}
于 2012-06-22T19:02:58.293 回答
4

默认情况下它将是假的,所以不需要做任何其他事情。

[DataMember] 
public bool IsValid { get; set; }
于 2012-06-22T19:36:08.137 回答
0

我建议执行以下操作:

    private string _recordId;

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

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

于 2014-12-26T14:51:41.127 回答