DataMember IsRequired属性与Nullable类型组合时是否矛盾?

本文关键字:是否 矛盾 组合 类型 IsRequired 属性 Nullable DataMember | 更新日期: 2023-09-27 18:11:11

我今天在一个WCF合同中看到了这个:

[DataMember(IsRequired = true)]
public DateTime? LastModified { get; set; } 

IsRequired = True和可空的DateTime的结果是什么?它们似乎是相互矛盾的。

DataMember IsRequired属性与Nullable类型组合时是否矛盾?

如果您想用null初始化它并让用户设置有效日期,这是有意义的。因此,在提交之前,它可以验证用户输入。

这里有一个类似的矛盾可以回答你的问题。

与IsRequired的交互

DataMemberAttribute属性有一个IsRequired属性默认为false)。属性指示给定的数据成员是否在序列化数据反序列化时,必须存在于序列化数据中。如果IsRequired被设置为true,(这表明一个值必须是。EmitDefaultValue设置为false(表示值(如果设置为默认值,则不能出现),default此数据成员的值不能序列化,因为结果会自相矛盾。如果这样的数据成员被设置为其默认值值(通常为null或零),并尝试进行序列化SerializationException被抛出。

猜测:你必须有一个节点为'LastModified' (=required),但内容可以是空的(=value是null)