从XML生成C#类


Answers:


338

是的,通过使用xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.

笔记

回答如何将“开发人员命令提示符”中的目录更改为d:\ temp可能会有用。

如果为多维数组生成类,则XSD.exe生成器中存在错误,但是存在解决方法


18
要使用xsd该工具,请在工具菜单下运行VS2013开发人员命令提示符
Jess

13
xsd.exe可以在以下位置找到:C:\Program Files (x86)\Microsoft SDKs\Windows
朱利安

7
如果您有一个大型的复杂XML文件,则警告该类将非常丑陋,以致几乎无法使用;)
马修·洛克

3
在以下xsd.exe位置找到了我: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179 '17

413

如果您正在VS 2012(或更高版本)中的.NET 4.5项目,则可以仅将XML文件作为类特殊粘贴

  1. 将XML文件的内容复制到剪贴板
  2. 在编辑器中,选择要粘贴课程的位置
  3. 从菜单中选择 EDIT > Paste Special > Paste XML As Classes

22
我只希望这个生成的自动实现的属性,就像“将JSON作为类粘贴”一样。当前,这意味着6倍的肿代码结果,这很难阅读。不幸的是,仅此一项就让我寻找了另一种工具。
Nicholas Petersen 2013年

1
这是VS 2013所遗漏的吗?
罗杰

3
@Roger我还没有使用过VS 2013,但是我认为该功能应该存在,请确保您的项目针对的是.NET 4.5 Framework
miszczu 2014年

2
这比快得多xsd,但输出大致相同。
Jess

4
如果您没有收割者,请使用regex替换为public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n=> public $1 $2 { get; set; }和`private \ w + \ w + Field; \ r \ n \ r \ n`
AlexDev

44

起初我以为选择性粘贴是圣杯!但是后来我尝试了一下,就像印第安纳·琼斯的电影一样,我的头发变白了。

但是现在我使用http://xmltocsharp.azurewebsites.net/,现在我和以往一样年轻。

这是它生成的内容的一部分:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }

5
该工具的输出很好,但是我只是想提个警告,不要向该站点(或其他任何与此站点有关的站点)提交敏感数据。虽然我赞赏提供的服务,但没有隐私政策,几乎没有保证您粘贴的内容将不会被记录和检查,等等
。– SvenAelterman

2
我有一个具有某些递归关系的xml文件(可能不确定,称为循环关系。)其他文件都失败了,但xmltocsharp.azurewebsites.net在该xml上非常成功。
Koray

4
@ D.Kermott感谢您的网站链接,我快速浏览了一下,它看起来比粘贴特殊功能要好得多,代码看起来更干净,尽管我的测试xml创建了更多的类,但它确实很多更好用。
哈拉格

可惜似乎颠倒了课程的顺序(最后列出的外部要素)
Savage

22

我意识到这是一个相当老的职位,您可能已经继续前进。

但是我和您有同样的问题,所以我决定编写自己的程序。

对我来说,“ xml-> xsd->类”路由的问题在于它只是生成了完全无法维护的大量代码,最终我把它弄乱了。

它绝非优雅,但却为我完成了工作。

您可以在此处获得:如果喜欢,请提出建议。

SimpleXmlToCode


1
产生错误的代码:// ELEMENTS [XmlIgnore] public DateTime Value {get; 组; } [XmlText]公共字符串ValueString {获取{返回值?“真假”; }设置{Value = value ==“ true”; }
AndréFiedler 2014年

而构造函数是不必要+你应该包括公开可见的成员的意见
安德烈·菲德勒

1
在我的辩护中,我很快就拍了拍对我有用的东西。我还没有回过头,但是可以随时为回购做出任何更改。
Talon 2014年

我已经使用了几个月-它并不完美,但是它非常有用,而且我发现它比VS2013粘贴为XML生成的可读性/简单性更高。非常感谢Talon。
codechinchilla 2014年

6

您应该考虑svcutil(svcutil问题

xsd.exe和svcutil都在XML模式文件(.xsd)上运行。您的XML必须符合要由这两个工具之一使用的架构文件。

请注意,为此也存在各种第三方工具。


3

您可以按照Darin的建议使用xsd。

除此之外,建议编辑test.xsd文件以创建更合理的架构。

type="xs:string"可以更改type="xs:int"为整数值
minOccurs="0"可以更改minOccurs="1"为需要该字段的位置
maxOccurs="unbounded"可以更改为maxOccurs="1"只允许一项的位置

如果您想进一步验证数据,则可以创建更高级的xsd -s,但这至少会在生成的c#中为您提供合理的数据类型。


1

使用以下语法从XSD文件创建架构类。

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\

0

要将XML转换为C#类:

  • 导航到Microsoft Visual Studio市场:-https: //marketplace.visualstudio.com
  • 在搜索栏中输入文本:-xml转换为类代码工具
  • 下载,安装和使用该应用

注意:在整个时间段内,可能会替换此应用程序,但有可能会有另一个工具执行相同的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.