Створення класу 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

22
Я просто хочу, щоб цей створений автоматично реалізовані властивості, як це робиться для "Вставити JSON як класи". В даний час це означає 6-кратний результат здутого коду, який читати набагато складніше. На жаль, це змушує мене шукати інший інструмент, на жаль.
Ніколас Петерсен

1
Це залишилось поза VS 2013?
Роджер

3
@Roger Я не використовував VS 2013, але, думаю, ця функція повинна бути там, переконайтеся, що ваш проект орієнтований на .NET 4.5 Framework
miszczu

2
Це набагато швидше xsd, але вихід приблизно однаковий.
Джесс

4
Якщо у вас немає 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\npublic $1 $2 { get; set; }
повторного планування,

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
Вихід цього інструменту є приємним, але я просто хочу застерегти, щоб не надсилати на цей сайт жодних конфіденційних даних (або будь-яких інших). Хоча я ціную запропоновану послугу, немає політики конфіденційності і мало
запевняє,

2
У мене був XML-файл, який має деякі рекурсивні відносини (можливо, це називається круговим відношенням, я не впевнений.) У інших не вдалося, але xmltocsharp.azurewebsites.net був дуже успішним у цьому xml.
Корай

4
@ D.Kermott дякую за посилання на веб-сайт, я швидко ознайомився з цим, і, схоже, це робить набагато кращу роботу, ніж спеціальна паста, код виглядає чистішим, хоча мій тест XML створив більше класів, це було набагато приємніше використовувати.
Хараг

Шкода, здається, інвертувати порядок класів (зовнішні елементи, перелічені останні)
Savage

22

Я розумію, що це досить стара посада, і ви, мабуть, пішли далі.

Але у мене була така ж проблема, як у вас, тому я вирішив написати свою програму.

Проблема з маршрутом "xml -> xsd -> class" для мене полягала в тому, що він просто створив грудку коду, який був абсолютно неможливий, і я в кінцевому підсумку переробив його.

Це аж ніяк не елегантно, але це зробило роботу для мене.

Ви можете отримати його тут: Будь ласка, введіть пропозиції, якщо вам це подобається.

SimpleXmlToCode


1
створює неправильний код: // ELEMENTS [XmlIgnore] public DateTime Value {get; набір; } [XmlText] публічний рядок ValueString {get {return Value? "true": "false"; } встановити {Value = value == "true"; }}
Андре Фідлер

І конструктори зайві + ви повинні включити коментарі для публічно видимих ​​членів
Андре Фідлер

1
На мій захист це дуже швидко вдарило мене, і це спрацювало на мене. Я не повертався до цього, але не соромтесь робити внесок у репо будь-які зміни.
Талон

Я використовую це протягом декількох місяців - це не ідеально, але це досить корисно, і я вважаю, що він генерує набагато більш читабельний / простіший XML, ніж вставка VS2013 як XML. Багато цінував Талон.
codechinchilla

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, якщо хочете додатково перевірити свої дані, але це принаймні дасть вам розумні типи даних у створеному c #.


1

Використовуйте синтаксис нижче, щоб створити клас схеми з файлу XSD.

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

0

Для перетворення XML у клас C #:

  • Перейдіть на майданчик Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • У рядок пошуку введіть текст: - XML ​​до інструменту коду класу
  • Завантажте, встановіть та використовуйте додаток

Примітка. У повному обсязі цей додаток може бути замінено, але, швидше за все, буде інший інструмент, який робить те саме.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.