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

デフォルトでは false なので、他に何もする必要はありません。

[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());」オブジェクトが

于 2014-12-26T14:51:41.127 に答える