DataMember的IsRequired属性与Nullable类型结合使用是否矛盾?

15

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

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

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

2个回答

8

如果您希望将其初始化为null并允许用户设置有效日期,则这是有意义的。因此,在提交之前,它可以验证用户输入。

以下是一个类似的矛盾问题,可能可以回答您的问题。

与IsRequired的交互

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


所以,如果我理解你的意思正确的话(或者更恰当地说 - MSDN双语),如果将此属性的值设置为null或完全排除,则会导致SerializationException。因此,最好完全排除IsRequired属性? - Rebecca
考虑与旧版本服务的兼容性。如果需要,您可以将新成员的IsRequired设置为false,并传递默认值。 - user604613
@Junto:我认为是这样,IsRequired false 更安全,更有意义。 - CharithJ

3
一个猜想:您必须拥有一个“LastModified”节点(=必需),但内容可以为空(=值为null)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接