我有以下模型类:
[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。
如果我将此字段更改为字符串,则响应中似乎没有问题。所有其他字段都出现在响应中。
答案 0 :(得分:4)
不希望EmitDefaultValue
使用值类型(如bool
)。 bool
的默认值为false
,这就是为什么它被省略的原因。
也许您打算使用可空的bool bool?
代替?
有关此内容的更多信息:
在.NET Framework中,类型具有默认值的概念。对于 例如,对于任何引用类型,默认值为null,对于任何引用类型 整数类型为0.偶尔需要省略数据 当序列化数据设置为其默认值时,该成员。 为此,请将EmitDefaultValue属性设置为false(它是真的 默认值)。
建议不要将EmitDefaultValue属性设置为false 实践。只有在有特殊需要时才应该这样做 (例如,为了互操作性或减少数据大小)。