Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对故障定位XSD的C#数据验证_C#_Xml_Validation_Xsd_Xmlserializer - Fatal编程技术网

针对故障定位XSD的C#数据验证

针对故障定位XSD的C#数据验证,c#,xml,validation,xsd,xmlserializer,C#,Xml,Validation,Xsd,Xmlserializer,我使用xsd.exe从xsd模式生成了类。我无法控制模式。使用XmlSerlializer进行读取、写入以及序列化数据的验证工作正常。 我想根据模式中的规则,对包含用户输入的数据执行在线错误检查。同样,我对序列化和验证没有问题,但是我发现没有简单的方法可以跟踪故障的位置,故障发生在哪个类的哪个实例中。 我发现了一条评论,其中提到不存在XmlValidatingWriter的原因是这些类应该已经确保了模式兼容性,但是对于xsd.exe生成的类来说,情况并非如此。(结构和类型良好,但不包括唯一字段、

我使用xsd.exe从xsd模式生成了类。我无法控制模式。使用XmlSerlializer进行读取、写入以及序列化数据的验证工作正常。 我想根据模式中的规则,对包含用户输入的数据执行在线错误检查。同样,我对序列化和验证没有问题,但是我发现没有简单的方法可以跟踪故障的位置,故障发生在哪个类的哪个实例中。 我发现了一条评论,其中提到不存在XmlValidatingWriter的原因是这些类应该已经确保了模式兼容性,但是对于xsd.exe生成的类来说,情况并非如此。(结构和类型良好,但不包括唯一字段、图案匹配等) 有一个关于的页面,但对我来说这似乎是超级手册,完全忽略了我所有的类都是xml可序列化的这一事实

我发现了类似的问题,但似乎没有人有这个特定的目标,我也找不到一个答案来引导我找到解决方案。我可以断定,由于某些原因,这是不可能的——就像我现在看到的那样——但我想了解原因,并了解我的整个架构哪里出了问题


谢谢。

好的,这就是我最后要做的。我并不为此感到骄傲

  • 我有一个基类,我的所有xml节点都从该基类继承。我向它添加了一个GUID属性,该属性被标记为xmlattribute,默认情况下具有xmlignore属性,因此它不参与正常的序列化/反序列化
  • 当我准备序列化以进行验证时,我创建了一个XMLAttributeOverride来摆脱GUID属性的xmlignore。guid将被序列化为每个元素的xml属性
  • 我创建了一个新的XDocument并将其序列化
  • 我使用需要验证的模式运行XDocument.Validate
  • 在验证事件处理程序中,我忽略所有抱怨额外guid属性的错误
  • 当我收到真正的验证错误或警告时,我可以找到根据guid序列化到特定元素中的实际对象
  • 利润

  • 可能效率很低,但就我处理的数据大小而言,这没问题。

    大多数
    XmlReader
    实例都实现了这一点<代码>元素。根据您验证XML的方式,您可能可以使用它来提取或沿线的故障位置。您能否将您的问题分享给我们,以展示如何验证XML?另外,
    XmlSchemaException
    包含行和位置信息。它就在那里,所以您应该可以开始了。另请参阅,以获取反序列化期间要验证的通用方法。验证失败将传递一个包含
    XmlSchemaException
    @dbc的消息,谢谢。我可以这样做,但我对序列化数据(行/位置)中的错误位置并不感兴趣。在序列化之前,我关心它在对象层次结构中的位置。我想知道在序列化过程中是否有一种获取LineInfo的方法,XmlWriter何时将我的一个对象写入到它结束的行中。通过这种方式,至少我可以根据XmlSchemaException或事件处理程序中的行追踪到确切的对象。顺便说一句,我使用的是XDocument.Validate,然后再将其序列化。但我认为这无关紧要。