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