我使用SDK中的xsd.exe工具基于XSD生成了C#类。然后我可以使用该类来使用XmlSerializer [de]序列化对象......但序列化程序似乎非常宽容。
如果缺少属性或“奇怪的”XML节点,是否有可能使序列化程序抛出异常?
我认为一种方法是修改属性的setter并使其验证数据(或使用XSD验证)......但是,对于这个问题还有其他替代解决方案吗?
答案 0 :(得分:2)
您可以实现IXmlSerializable
interface并在ReadXml
method实现中检查您需要的特定元素,在找不到它们时抛出异常(或设置您需要的任何通知)。
如果要使用模式进行验证(例如,使用minOccurs
and maxOccurs
schema attributes),则可以通过设置XmlReader
来配置Schemas
property实例以针对模式进行验证在您传递给XmlReaderSettings
class的Create
method上(请注意,Create
的重载会占用TextReader
等。)