2013-05-02 28 views
0

我有以下模型類:的ASP.NET Web API不序列化BOOL領域

[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

使用EmitDefaultValue與值類型(如bool)是不可取的。 bool的默認值是false,這就是爲什麼它會被忽略。

也許你打算使用可空布爾bool?而不是?關於這個這裏

更多信息:

在.NET Framework,類型有默認值的概念。例如,對於 示例,對於任何參考類型,默認值爲null,而對於整數類型,則爲0.偶爾需要在序列化數據設置爲其默認值時省略數據 成員。 爲此,請將EmitDefaultValue屬性設置爲false(默認爲 )。

將EmitDefaultValue屬性設置爲false不是推薦的 練習。只有在特定需要時才應該這樣做 (如用於互操作性或減小數據大小)。

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