Создать класс C # из XML

Ответы:

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 в меню инструментов.
Джесс
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
414

Если вы работаете над проектом .NET 4.5 в VS 2012 (или новее), вы можете просто Специально Вставить ваш XML-файл как классы.

  1. Скопируйте содержимое вашего XML-файла в буфер обмена
  2. В редакторе выберите место, куда вы хотите вставить ваши классы
  3. В меню выберите EDIT > Paste Special > Paste XML As Classes
miszczu
источник
22
Я просто хочу, чтобы это генерировало автоматически реализованные свойства, как это делается для "Вставить JSON как классы". В настоящее время это означает 6-кратный раздутый код, который намного сложнее читать. Одно это заставляет меня искать другой инструмент, к сожалению.
Николас Петерсен
1
Это было оставлено вне VS 2013?
Роджер
3
@ Роджер Я не использовал VS 2013, но я думаю, что эта функция должна быть там, убедитесь, что ваш проект ориентирован на .NET 4.5 Framework
miszczu
2
Это намного быстрее чем xsd, но результат примерно такой же.
Джесс
4
Если у вас нет reharper, используйте 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.
Корай
4
@ D.Kermott спасибо за ссылку на веб-сайт, я быстро взглянул на нее, и похоже, что она работает намного лучше, чем специальная вставка, код выглядит чище, хотя мой тестовый xml создал больше классов, это было намного приятнее в использовании.
Хараг
Жаль, что это, кажется, инвертирует порядок классов (внешние элементы перечислены последними)
Savage
22

Я понимаю, что это довольно старый пост, и вы, вероятно, пошли дальше.

Но у меня была та же проблема, что и у вас, поэтому я решил написать свою собственную программу.

Проблема с маршрутом "xml -> xsd -> classes" для меня заключалась в том, что он просто генерировал кусок кода, который был совершенно не поддерживаемым, и я закончил его поиском.

Это ни в коем случае не изящно, но это сделало работу для меня.

Вы можете получить это здесь: Пожалуйста, сделайте предложения, если вам это нравится.

SimpleXmlToCode

коготь
источник
1
выдает неправильный код: // ELEMENTS [XmlIgnore] public DateTime Value {get; устанавливать; } [XmlText] публичная строка ValueString {get {return Value? «правда»: «ложь»; } set {Value = value == "true"; }}
Андре Фидлер
И конструкторы не нужны + вы должны включить комментарии для публично видимых участников
André Fiedler
1
В свою защиту это было то, что я быстро собрал, и это сработало для меня. Я не вернулся к этому, но не стесняйтесь вносить изменения в репо.
Talon
Я использовал это в течение нескольких месяцев - он не идеален, но он довольно полезен, и я считаю, что он генерирует намного более читаемый / более простой XML, чем вставка VS2013 в XML. Очень ценил Талон.
codechinchilla,
6

Вы должны рассмотреть svcutil ( вопрос svcutil )

И xsd.exe, и svcutil работают с файлом схемы XML (.xsd). Ваш XML должен соответствовать файлу схемы, который будет использоваться любым из этих двух инструментов.

Обратите внимание, что для этого также существуют различные сторонние инструменты.

ng5000
источник
3

Вы можете использовать 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\
Kiran.Bakwad
источник
0

Чтобы преобразовать XML в класс C #:

  • Перейдите на рынок Microsoft Visual Studio: - https://marketplace.visualstudio.com.
  • В строке поиска введите текст: - xml to code code tool
  • Скачайте, установите и используйте приложение

Примечание: со временем это приложение может быть заменено, но есть шанс, что появится другой инструмент, который сделает то же самое.

Дж Вуд
источник