ASP.NET Web API未序列化bool字段

时间:2013-05-02 13:24:56

标签: c# asp.net rest asp.net-web-api

我有以下模型类:

[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。

如果我将此字段更改为字符串,则响应中似乎没有问题。所有其他字段都出现在响应中。

1 个答案:

答案 0 :(得分:4)

不希望EmitDefaultValue使用值类型(如bool)。 bool的默认值为false,这就是为什么它被省略的原因。

也许您打算使用可空的bool bool?代替?

有关此内容的更多信息:

  

在.NET Framework中,类型具有默认值的概念。对于   例如,对于任何引用类型,默认值为null,对于任何引用类型   整数类型为0.偶尔需要省略数据   当序列化数据设置为其默认值时,该成员。   为此,请将EmitDefaultValue属性设置为false(它是真的   默认值)。

     

建议不要将EmitDefaultValue属性设置为false   实践。只有在有特殊需要时才应该这样做   (例如,为了互操作性或减少数据大小)。

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