从XML生成C#类

use*_*949 233 .net c# xml xsd

我可以从XML文件生成C#类吗?

mis*_*czu 399

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

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

  • 我只希望这生成自动实现的属性,就像"将JSON粘贴为类"一样.目前这意味着一个6倍膨胀的代码结果,这是很难阅读.不幸的是,这一点让我找到了另一种工具. (21认同)
  • 如果你没有resharx使用regex替换为`public(\ w +)(\ w +)\ r \n +\{\ r \n + get + r \n +\{\ r \n +返回此.*;\r \n + \}\r \n +设置\ r \n +\{\ r \n +此.*;\r \n + \}\r \n + \}\r \n` = >`public $ 1 $ 2 {get; 组; }`和`private\w +\w + Field;\r \n\r \n` (4认同)
  • @Roger我没有使用VS 2013,但我认为应该有这个功能,确保你的项目针对的是.NET 4.5 Framework (3认同)
  • 这比`xsd`快得多,但输出大致相同. (2认同)
  • 很棒的解决方案!除此之外,如果您有 Resharper - CTRL+ALT+F(完全清理)也使生成的代码可读。 (2认同)

Dar*_*rov 333

是的,使用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'.
Run Code Online (Sandbox Code Playgroud)

笔记

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

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

  • 要使用`xsd`,请在工具菜单下运行**VS2013的开发人员命令提示符**. (16认同)
  • `xsd.exe`可以在以下位置找到:`C:\ Program Files(x86)\ Microsoft SDKs\Windows` (13认同)
  • 如果你有一个大型复杂的XML文件,那么生成的类将会如此丑陋以至于几乎无法使用; (7认同)
  • 对我来说,`xsd.exe`位于:`C:\ Program Files(x86)\ Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1工具 (3认同)

D. *_*ott 40

起初我认为Paste Special是圣杯!但后来我尝试了,我的头发就像印第安纳琼斯电影一样变白了.

但现在我使用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; }
Run Code Online (Sandbox Code Playgroud)

  • @ D.Kermott感谢您的网站链接,我已经快速浏览了一下它看起来比粘贴特别好得多,代码看起来更干净,虽然我的测试xml创建了更多的类,它很多更好用. (4认同)
  • 这个工具的输出很不错,但我只是想提醒一下,不要向本网站(或任何其他此类网站)提交任何敏感数据.虽然我很欣赏所提供的服务,但是没有隐私政策,很少甚至不能保证您粘贴的内容不会被记录和检查等. (3认同)
  • 我有一个xml文件,它有一些递归关系(也许它被称为循环关系,我不确定.)其他人失败但http://xmltocsharp.azurewebsites.net/在那个xml上非常成功. (2认同)

Tal*_*lon 22

我意识到这是一个相当古老的帖子,你可能已经开始了.

但是我遇到了和你一样的问题所以我决定编写自己的程序.

对我来说,"xml - > xsd - > classes"路径的问题在于它只是生成了一块完全无法维护的代码,我最终还是把它搞得一团糟.

它绝不优雅,但它为我做了工作.

你可以在这里得到它:如果你喜欢,请提出建议.

SimpleXmlToCode


ng5*_*000 6

你应该考虑svcutil(svcutil问题)

xsd.exe和svcutil都在XML模式文件(.xsd)上运行.您的XML必须符合这两个工具中任何一个使用的模式文件.

请注意,此处还存在各种第三方工具.


Alb*_*nbo 6

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

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

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

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