DataMember IsRequired属性是否与Nullable类型相矛盾?

时间:2011-10-14 11:10:25

标签: c# .net wcf datamember isrequired

我今天在WCF合同中遇到过这个问题:

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

IsRequired = True和可空DateTime的后果是什么?他们似乎彼此矛盾。

2 个答案:

答案 0 :(得分:9)

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

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

Interaction with IsRequired

  

DataMemberAttribute属性具有IsRequired属性(   默认为false)。该属性指示是否为给定的数据成员   在反序列化时,必须存在于序列化数据中。   如果IsRequired设置为true,则表示值必须为   现在)和EmitDefaultValue设置为false(表示   如果设置为默认值,则默认值不得出现   由于结果,无法序列化此数据成员的值   会是矛盾的。如果此类数据成员设置为其默认值   值(通常为null或0)并尝试序列化,a   抛出SerializationException。

答案 1 :(得分:3)

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