我一直在寻找C#的XML序列化,看起来很有趣。我正在阅读本教程
http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization
当然你可以将它序列化回一个对象列表。所以我想知道最好将它序列化回一个对象列表,然后遍历每个对象并验证它或者使用一个模式验证它,然后对它进行反序列化并用它做一些事情吗?
http://support.microsoft.com/kb/307379
由于
答案 0 :(得分:1)
我想这取决于你想要验证什么,以及用于什么目的。如果它是为了与其他系统互操作,那么通过xsd进行验证是一个合理的想法,不仅仅是因为你可以使用xsd.exe
从xsd为你编写类(你也可以从xml或dll生成xsd,但是它不那么准确)。同样,您可以使用XmlReader
(已正确配置)来检查xsd,
如果您只想要有效的.NET对象,我很想将序列化表单作为实现细节,并编写一些C#验证代码 - 可能实现IDataErrorInfo
,或使用数据注释。
答案 1 :(得分:0)
您可以创建一个XmlValidatingReader并将其传递给序列化程序。这样,您可以一次读取文件并同时验证它。
我相信即使您使用手动滚动的XML类(对于非常大的XML文件),相同的技术也会起作用,因此您可能会发现值得一看。
编辑:
很抱歉只是重读了我的一些代码,XmlValidatingReader已经过时,你可以用XmlReader做你需要的。
答案 2 :(得分:0)
为了速度,我会在C#中进行,但是为了完整性,您可能希望使用XSD来完成。问题在于你必须学习冗长而繁琐的XSD语法,这些语法经验需要大量的试验和错误,耗时并且不会给序列化带来很多奖励。特别是对于必须在C#和XSD中映射它们的常量。
您将始终将XML编写为C#。读回来时任何未知的东西都会被忽略。如果您不使用文本编辑器编辑XML,则可以保证它将以正确的方式返回,在这种情况下,绝对不需要XSD。
答案 3 :(得分:0)
如果验证XML,则只能证明它在结构上是正确的。尝试从XML反序列化将告诉您同样的事情。
通常,业务对象可以实现超出有效模式的业务逻辑/规则/条件。这种类型的知识应该与业务对象本身保持一致,而不是在某种外部验证例程中重复(否则,如果您更改业务规则,则必须同时更新验证程序)。