Чи можу я створити клас C # з XML-файлу?
Чи можу я створити клас C # з XML-файлу?
Відповіді:
Так, за допомогою 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 є помилка, але є і обхідні шляхи .
xsd
запустіть командний рядок розробника для VS2013 у меню ваших інструментів.
xsd.exe
можна знайти під:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
знайшли за адресою: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Якщо ви працюєте над проектом .NET 4.5 в VS 2012 (або новішій версії), ви можете просто спеціально вставити ваш XML-файл як класи.
EDIT > Paste Special > Paste XML As Classes
xsd
, але вихід приблизно однаковий.
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; }
Спочатку я думав, що спеціальна паста - це святий грааль! Але потім я спробував це, і моє волосся стало білим, як у фільмі про Індіану Джонса.
Але зараз я використовую 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; }
Я розумію, що це досить стара посада, і ви, мабуть, пішли далі.
Але у мене була така ж проблема, як у вас, тому я вирішив написати свою програму.
Проблема з маршрутом "xml -> xsd -> class" для мене полягала в тому, що він просто створив грудку коду, який був абсолютно неможливий, і я в кінцевому підсумку переробив його.
Це аж ніяк не елегантно, але це зробило роботу для мене.
Ви можете отримати його тут: Будь ласка, введіть пропозиції, якщо вам це подобається.
Ви повинні врахувати svcutil ( питання svcutil )
І xsd.exe, і svcutil працюють у файлі схеми XML (.xsd). Ваш XML повинен відповідати файлу схеми, який повинен використовувати будь-який із цих двох інструментів.
Зауважте, що для цього також існують різні інструменти сторонніх виробників.
Ви можете використовувати xsd, як запропонував Дарин.
На додаток до цього рекомендується редагувати файл test.xsd для створення більш розумної схеми.
type="xs:string"
може бути змінено на type="xs:int"
цілі значення,
minOccurs="0"
можна змінити на те, minOccurs="1"
де потрібно поле,
maxOccurs="unbounded"
можна змінитиmaxOccurs="1"
де дозволено лише один елемент
Ви можете створити більш вдосконалені xsd-s, якщо хочете додатково перевірити свої дані, але це принаймні дасть вам розумні типи даних у створеному c #.
Використовуйте синтаксис нижче, щоб створити клас схеми з файлу XSD.
C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Для перетворення XML у клас C #:
Примітка. У повному обсязі цей додаток може бути замінено, але, швидше за все, буде інший інструмент, який робить те саме.