20

我正在尝试构建一些类,以便我可以反序列化由第三方应用程序创建的 XML 文件。幸运的是,第 3 方应用程序的开发人员在他们的代码中包含了一个模式文件,以便可以理解 XML 文件。

当我使用 Visual Studio 中的 XSD.exe 工具时,进程无法报告以下错误

“来自 targetNamespace='' 的组 'SegGroupOrSegmentGrouping' 的定义无效:循环组引用。”

对于如何根据此错误生成类文件的任何帮助,我们将不胜感激。可以在此处找到架构文件的副本:架构文件

4

4 回答 4

15

尝试使用svcutil;它可以处理循环引用。

在以下示例中,eExact-Schema.xsd是一个xsd.exe无法处理的 XSD。

例子:

C:\SRC\Exact>svcutil eExact-Schema.xsd /language:C# /dataContractOnly /importxmltypes /out:exact.cs

这始终是一个很好的起点;您现在可以使用此类并根据您的风格/需求进行更改,添加评论等,它将为您节省大量时间/从头开始搜索。

于 2015-07-08T06:49:44.580 回答
12

我最近遇到了同样的问题,

我从第三方公司获得了一个架构,该公司从 Web 服务返回一个 xml 结构。然后我想反序列化响应并将信息存储到 NHibernate 的数据库中。

没问题,我想我会使用 xsd.exe 来上课。不幸的是,事实并非如此。Xsd.exe 失败,与您遇到的错误完全相同。这是因为它无法解析循环引用。

我花了好几天的时间寻找替代方案,直到最后我将自己的类结构写入模式并能够完美地反序列化。这里的答案是编写自己的 C# 类并用适当的属性装饰它们。

为自己节省一些时间和心痛,不要继续尝试最终自动生成您需要的类,尽管耗时您编写的类不会做出大多数工具(不能完美运行)会让您做出的妥协制作。

我花了大约 3 天的时间来编写课程结构(它很大),但我最终得到了一个高质量的解决方案。

有一件事是肯定的,你将无法使用 xsd.exe 和我在谷歌搜索后尝试的大多数其他工具,要么不能正常工作,要么有问题。

于 2010-11-09T22:49:17.527 回答
3

在尝试了几个第三方工具后,我发现 Liquid Technologies 有一个非常强大的生成器,称为Liquid XML Data Binder 2012。它能够处理我面临的循环组引用问题。从 2.0 开始,它几乎可以为任何版本的 .net 生成代码。它生成的类确实依赖于它们提供的可再发行 dll。我正在使用试用版,如果在发布之前需要购买完整版,我不会感到惊讶。然而,为我节省了大约一百个小时或更长时间容易出错的手工编码,我不能抱怨。

于 2012-08-14T17:22:59.157 回答
0

对我来说最简单的方法是使用 XSD.EXE 从实际的 XML 文件创建 XSD 文件。然后从新的 XSD 文件创建一个类。如果引入了原始 XML 中不存在的节点或类型,您可能需要定期修改类,但您将为自己节省 HOURS 编码时间!!!!

于 2013-04-30T15:53:24.703 回答