Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
C# 如何从XSD以编程方式生成.NET类?(与xsd.exe类似)_C#_.net_Xml_Xsd_Schema - Fatal编程技术网

C# 如何从XSD以编程方式生成.NET类?(与xsd.exe类似)

C# 如何从XSD以编程方式生成.NET类?(与xsd.exe类似),c#,.net,xml,xsd,schema,C#,.net,Xml,Xsd,Schema,我想用xsd.exe方式生成类,而不是用linqtoxsd方式。看看这个类 更新(以防约翰·桑德斯懒得进一步阅读) “Xsd.exe使用XmlCodeExporter 从XML模式生成类 定义(XSD)文档。” 你不知道该怎么做 您可以将该类的一个或多个实例加载到。这将允许您以编程方式检查模式的所有部分以及它可能引用的其他模式。您可以使用这些信息生成代码,或者作为稍后需要编译的文本,或者使用CodeDOM。看 如果您是在VisualStudio的上下文中生成代码,那么我建议您通过T4模板来生成

我想用xsd.exe方式生成类,而不是用linqtoxsd方式。

看看这个类

更新(以防约翰·桑德斯懒得进一步阅读)

“Xsd.exe使用XmlCodeExporter 从XML模式生成类 定义(XSD)文档。”


你不知道该怎么做

您可以将该类的一个或多个实例加载到。这将允许您以编程方式检查模式的所有部分以及它可能引用的其他模式。您可以使用这些信息生成代码,或者作为稍后需要编译的文本,或者使用CodeDOM。看



如果您是在VisualStudio的上下文中生成代码,那么我建议您通过T4模板来生成代码。请参阅。

您可以使用从代码中调用xsd.exe。我做过一次,它快速而直接。你不需要太无聊:)。

试试看

似乎是最好的免费/开源工具

与VS2010的良好集成


这对我来说非常有用。

为什么不使用xsd.exe?也许你不想,这对你来说是什么?@leppie:这会澄清要求。例如,他是否有不调用外部程序的限制?不使用Microsoft程序?@leppie:最简单的解决方案不是调用xsd吗?一行代码?(KISS/你不需要它)反对XSD的原因之一是至今仍然不支持列表-它仍然总是创建t[],这简直太可怕了。“这个API支持.NET Framework基础架构,不打算直接从代码中使用”我从1.1开始就使用它,有问题吗?“不打算使用”并不意味着“不能使用”;)+1表示该信息。我一直认为在进程中启动xsd.exe是唯一的解决方案。:-@leppie,Thomas:这取决于此代码对您是否重要。“基础架构”“代码可以更改,无需抱怨。毕竟,从.net 1.1开始,他们只是告诉您不要使用它。由于XML模式的复杂性,至少可以说,自己解析它并从中生成类将是一场噩梦。我不建议您自己解析它。通过使用XmlSchema.load加载单个模式,然后将结果添加到XmlSchemaSet。将您需要的所有模式添加到该集合中,然后您可以“编译”它以验证它并修复交叉引用;最后,您可以遍历结构并生成代码。对不起,我的意思是遍历(而不是解析)结构。我不知道您对SOM或XML模式规范有多熟悉,但从XML模式生成代码是一项庞大而复杂的任务(即使考虑到您应该只支持XML模式规范的一个子集,它实际上可以直接转换为代码)这就是为什么我更喜欢重用代码的原因。我非常熟悉SOM,这就是为什么我会选择基于SOM驱动的T4模板生成代码的原因。