XSD.exe和"循环组引用"

BEN*_*der 17 .net c# schema xsd.exe

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

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

"来自targetNamespace =''的组'SegGroupOrSegmentGrouping'具有无效定义:循环组引用."

任何有关如何根据此错误生成类文件的帮助将不胜感激.可以在此处找到模式文件的副本:模式文件

kry*_*our 12

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

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

没问题我以为我只会使用xsd.exe而且我会上课.不幸的是,这不是.Xsd.exe失败,出现了完全相同的错误.这是因为它无法解析循环引用.

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

节省一些时间和心痛,不要继续尝试最终自动生成所需的类,尽管耗费你所编写的课程耗费时间不会让大多数工具(不能完美运行)的妥协会让你失望使.

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

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

  • 克里斯坦 - 我必须同意,这正是我的发现.我最后手工编写了这些课程. (2认同)

NKC*_*CSS 10

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

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

例:

C:\SRC\Exact>svcutil eExact-Schema.xsd /language:C# /dataContractOnly /importxmltypes /out:exact.cs
Run Code Online (Sandbox Code Playgroud)

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

  • 它实际上并没有创建一个真正的 C# 模型,其中字段由普通的 C# 属性表示。相反,它使用“XmlNode”数组创建类来存储属性。 (4认同)
  • 疯狂的。这造成了 OpenCollada 规范中类的巨大膨胀,而 XSD 立即失败了。好的! (2认同)