在xs:complexType中,有以下元素:
运行像SvcUtil.exe这样的.NET工具,您将获得一个用DataContractAttribute修饰的类,其中包含以下属性: public string RegistrationNumber {get; set;} public DateTime ExpiryDate {get; set;} 公共日期时间? RegistrationEndDate {get; set;}
我的困惑是什么: 如果收到的XML实例没有联系这3个元素,则显然会使用默认值,但默认值未在XSD中明确定义。 string和Datetime的默认值是什么?
为了刷新我的记忆,我看看
2.2.1
那么如果默认值没有明确定义且元素为空/缺席怎么办?
标准似乎没有为这种情况定义,但显然这将受到接收器实现的支配。
对于整数和布尔值等数据类型,默认值很明显:0和false。从电子计算的第1天开始就很明确。
但是对于字符串和日期时间,情况有点棘手,主要是因为不同的语言对字符串和日期时间有不同的结构和约定。
你认为我的理解是正确的吗?
在MSDN中关于DataMemberAttribute.EmitDefaultValue,有一个声明:
“不建议将EmitDefaultValue属性设置为false。只有在特定需要时才应该这样做(例如,为了互操作性或减少数据大小)。”
你能告诉我为什么这不是推荐的做法吗?比方说,听起来像MS建议发出每个元素,无论XML消息中的minOccurs = 0是什么?
由于
安迪
答案 0 :(得分:0)
如果XML文档中缺少某个元素,则不应该有任何对象在内存中表示它。可以考虑模式具有minOccurs的任何元素或者定义为列表的maxOccurs。如果它的minOccurs = 0,maxOccurs = 1,那么我们认为它是可选的,但实际上它是一个最多只有一个元素的列表。所以表示它的数据结构应该是一个列表(或带有变量边界或...的数组)。那么它的价值问题毫无意义,规范中也没有含糊之处。
如果SvcUtil.exe没有这样做,我认为没错。