0

私は次のモデルクラスを持っています:

[DataContract(Namespace = "http://api.mycompany.com/v1")]
public class Job{
    [DataMember(IsRequired = true), Required]
    public long Id { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public DateTime? StartDate { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public DateTime? EndDate { get; set; }

    [DataMember(EmitDefaultValue = false)]        
    public bool isCurrentJob { get; set; }
}

何らかの理由で、HTTP GET 要求を実行すると、ブール値の isCurrentJob フィールドが、クライアントに返されるシリアル化された応答に含まれません。これが起こっている理由はありますか?値は null ではなく、true に設定されています。

このフィールドを文字列に変更すると、応答に問題がないように見えます。他のすべてのフィールドが応答に表示されます。

4

1 に答える 1

4

EmitDefaultValue値型 ( など) で使用することは望ましくありませんbool。のデフォルト値はboolisfalseであり、それが省略される理由です。

bool?おそらく、代わりにnullable bool を使用するつもりでしたか?

これについての詳細はこちら:

.NET Framework では、型には既定値の概念があります。For example, for any reference type the default value is null, and for an integer type it is 0. データ メンバーが既定値に設定されている場合、シリアル化されたデータからデータ メンバーを省略することが望ましい場合があります。これを行うには、EmitDefaultValue プロパティを false に設定します (デフォルトでは true です)。

EmitDefaultValue プロパティを false に設定することはお勧めできません。これは、特に必要がある場合 (相互運用性やデータ サイズの削減など) にのみ行う必要があります。

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.emitdefaultvalue.aspx

于 2013-05-02T14:13:34.437 に答える