【发布时间】:2011-10-27 12:45:39
【问题描述】:
在 xs:complexType 内部,有以下元素:
运行 SvcUtil.exe 等 .NET 工具,您将获得一个装饰有 DataContractAttribute 的类,其中包含以下属性: 公共字符串 RegistrationNumber {get;set;} 公共日期时间 ExpiryDate {get;set;} 公共日期时间? RegistrationEndDate {get;set;}
让我困惑的是: 如果接收到的 XML 实例不联系这 3 个元素,则显然将使用默认值,尽管默认值未在 XSD 中明确定义。字符串和日期时间的默认值是什么?
为了刷新我的记忆,我看看
http://www.w3.org/TR/xmlschema-0/
2.2.1
总而言之,元素默认值和属性默认值的区别可以表述为:属性缺失时应用默认属性值,元素为空时应用元素默认值。
如果没有明确定义默认值并且元素为空/不存在怎么办?
标准似乎没有为这种情况定义,但显然这将取决于接收器的实现。
对于像整数和布尔这样的数据类型,默认值很明显:0 和 false。从电子计算的第一天开始就定义明确。
但是对于字符串和日期时间,情况就有点棘手了,主要是因为不同的语言对字符串和日期时间有不同的结构和约定。
你认为我的理解正确吗?
在MSDN中关于DataMemberAttribute.EmitDefaultValue,有这么一句话:
“不建议将 EmitDefaultValue 属性设置为 false。只有在有特定需要时才应该这样做(例如为了互操作性或减少数据大小)。”
你能告诉我为什么这不是推荐的做法吗?比如说,无论在 XML 消息中是否 minOccurs=0,听起来 MS 都建议发射每个元素?
谢谢
安迪
【问题讨论】: