设置 WCF DataMember 属性的默认值

4

我希望给下面的类添加一个新的属性bool IsValid。我希望这个属性不需要Required并且默认设置为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; }
}

如果您希望它是必需的(即,在线路上必须存在),那么默认值无论如何都不重要,它将被在线路上传输的内容覆盖。 - carlosfigueira
抱歉,这不是必需的,请让我更改。 - Nick LaMarca
1
默认情况下它将为false。[DataMember] public bool IsValid {get; set;} - HatSoft
@HatSoft,你是对的,我没想到 falsebool 的默认值(我的错)。我的回答是针对一般情况,当你想设置一个任意值时。如果你把你的评论发布为答案,你肯定会得到我的赞同。 - carlosfigueira
3个回答

13

更新:我回答这个问题是考虑如何为任意类型定义默认值,但是,正如@HatSoft在评论中提到的那样,对于bool类型的属性,不需要做任何事情来设置false为默认值,因为它已经是该类型的默认值。尽管如此,我仍会保留这个答案以供一般情况下参考。

不能直接在[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;
    }
}

4

默认情况下,它将是false,因此无需进行其他操作。

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

0
我建议做以下事情:
    private string _recordId;

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

这里的 "_recordId = Guid.NewGuid().ToString());" 在对象创建时将Guid设置为默认值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接