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

224

Можно ли сгенерировать класс С# из файла XML?

Теги:
xsd

8 ответов

289
Лучший ответ

Да, с помощью 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 есть ошибка, но есть обходные пути.

  • 13
    Чтобы использовать xsd запустите командную строку разработчика для VS2013 в меню инструментов.
  • 13
    xsd.exe можно найти в: C:\Program Files (x86)\Microsoft SDKs\Windows
Показать ещё 2 комментария
390

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

  • Скопируйте содержимое вашего XML файла в буфер обмена
  • В редакторе выберите место, где вы хотите наклеить классы.
  • В меню выберите EDIT > Paste Special > Paste XML As Classes
  • 20
    Я просто хочу, чтобы это генерировало автоматически реализованные свойства, как это делается для "Вставить JSON как классы". В настоящее время это означает 6-кратный раздутый результат кода, который намного сложнее читать. Только это заставляет меня искать другой инструмент, к сожалению.
  • 1
    Это было оставлено вне VS 2013?
Показать ещё 15 комментариев
34

Сначала я подумал, что Паштет Специальный был святым Граалем! Но потом я попробовал это, и мои волосы побледнели, как фильм Индианы Джонса.

Но теперь я использую 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; }
  • 2
    Вывод этого инструмента хорош, но я просто хочу предостеречь вас от того, чтобы не отправлять какие-либо конфиденциальные данные на этот сайт (или любые другие в этом отношении). Хотя я ценю предлагаемую услугу, здесь нет политики конфиденциальности и почти нет уверенности в том, что то, что вы вставляете, не будет зарегистрировано и проверено и т. Д.
  • 2
    У меня был XML-файл, который имеет некоторые рекурсивные отношения (возможно, это называется круговое отношение, я не уверен.) Другие не удалось, но xmltocsharp.azurewebsites.net был очень успешным на этом XML.
Показать ещё 1 комментарий
23

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

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

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

Это никоим образом не изящно, но это помогло мне.

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

SimpleXmlToCode

  • 1
    выдает неправильный код: // ELEMENTS [XmlIgnore] public DateTime Value {get; задавать; } [XmlText] публичная строка ValueString {get {return Value? «правда»: «ложь»; } set {Value = value == "true"; }}
  • 0
    И конструкторы не нужны + вы должны включить комментарии для публично видимых членов
Показать ещё 2 комментария
6

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

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

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

3

Вы можете использовать xsd, как было предложено Дарином.

В дополнение к этому рекомендуется отредактировать файл test.xsd для создания более разумной схемы.

type="xs:string" можно изменить на type="xs:int" для целых значений
minOccurs="0" можно изменить на minOccurs="1", где требуется поле.
maxOccurs="unbounded" можно изменить на maxOccurs="1", где разрешен только один элемент

Вы можете создать более сложные xsd-s, если хотите еще раз проверить свои данные, но это, по крайней мере, даст вам разумные типы данных в сгенерированном С#.

0

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

  • Перейдите в Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • В строке поиска введите текст: - xml для инструмента кода класса
  • Загрузка, установка и использование приложения

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

0

Используйте синтаксис ниже для создания класса схемы из файла XSD.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню