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 字段不会包含在返回给客户端的序列化响应中。有什么原因可能会发生这种情况吗?该值不为空,它设置为 true。

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

4

1 回答 1

4

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

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

关于这里的更多信息:

在 .NET Framework 中,类型具有默认值的概念。例如,对于任何引用类型,默认值为 null,而对于整数类型,默认值为 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 回答