首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >针对带故障定位的XSD的C#数据验证

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

Stack Overflow用户
提问于 2017-08-27 01:48:26
回答 1查看 248关注 0票数 1

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

我发现了类似的问题,但似乎没有人有这个特别的目标,我也找不到一个能让我找到解决方案的答案。我可以得出结论,由于某种原因,这是不可能的,-as它现在在我看来--但我想了解原因,并知道我的整个架构哪里出了问题。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-08-28 08:07:01

好了,这就是我最终要做的。我并不以此为荣。

  1. 我有一个基类,我的所有xml节点都继承它。我添加了一个GUID属性,该属性被标记为xmlattribute,并且在默认情况下具有xmlignore属性,这样它就不会参与正常的序列化/反序列化。
  2. 当我要序列化以进行验证时,我创建了一个xmlattributesoverride来去掉GUID属性的xmlignore。guid将被序列化为每个元素的xml属性。
  3. 我创建了一个新的XDocument并序列化到其中。
  4. 我使用需要验证的模式运行XDocument.Validate。
  5. 在验证事件处理程序中,我忽略了所有抱怨额外guid属性的错误。
  6. 当我收到真正的验证错误或警告时,我可以根据guid找到序列化到特定元素中的实际对象。
  7. Profit.

效率可能非常低,但对于我正在处理的数据大小来说,这是可以的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45898156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档