我今天在WCF合同中遇到过这个问题:
[DataMember(IsRequired = true)]
public DateTime? LastModified { get; set; }
IsRequired = True
和可空的DateTime
有什么后果?他们似乎彼此矛盾。
如果你想用null初始化它并让用户设置一个有效的日期,这是有意义的。所以在提交之前它可以验证用户输入。
这是一个类似的矛盾,可以回答你的问题。
DataMemberAttribute属性具有IsRequired属性(默认值为false)。该属性指示在序列化数据被反序列化时是否必须存在给定数据成员。如果IsRequired设置为true,(表示必须存在值)并且EmitDefaultValue设置为false(表示如果将值设置为其默认值,则该值不得出现),此数据成员的默认值不能为序列化因为结果会相互矛盾。如果将此类数据成员设置为其默认值(通常为null或0)并尝试进行序列化,则抛出SerializationException。
猜测:你必须有一个'LastModified'节点(=必需),但内容可以为空(= value为null)。