2012-06-22 145 views
3

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

[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; } 
} 
+0

时,将默认值设置为Guid如果您希望它是必需的(即它必须存在于导线中),那么默认值是什么并不重要,它会被出现的内容覆盖电线。 – carlosfigueira

+0

对不起,它不是必需的,让我改变, –

+1

默认情况下,它将是假的 [DataMember] public bool IsValid {get;设置;} – HatSoft

回答

4

默认情况下它会是假的,所以没有其他的事情需要做。

[DataMember] 
public bool IsValid { get; set; } 
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; 
    } 
} 
0

我建议做以下:

private string _recordId; 

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

这里 “_recordId = Guid.NewGuid()的ToString());”。当对象为