XML'den C # sınıfı oluşturma


Yanıtlar:


338

Evet, xsd.exe'yi kullanarak

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'.

notlar

Cevap nasıl değişiklik dizinine Geliştirici Komutanlığı'nda İstemi d: \ temp yararlı olabilir.

Çok boyutlu dizi için sınıflar oluşturursanız, XSD.exe üreticisinde bir hata vardır , ancak geçici çözümler vardır .


18
Kullanmak için araçlar menünüzün altındaki VS2013xsd için Geliştirici Komut İstemi'ni çalıştırın .
Jess

13
xsd.exealtında bulabilirsiniz:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
Büyük bir karmaşık XML dosyanız varsa uyarılırsınız. Oluşturulan sınıf o kadar çirkin olur ki neredeyse kullanılamaz olacaktır;)
Matthew Lock

3
Benim xsd.exeiçin bulundu: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179

414

VS 2012'de (veya daha yenisi) .NET 4.5 projesi üzerinde çalışıyorsanız, Özel XML dosyanızı sınıflar olarak yapıştırabilirsiniz .

  1. XML dosyanızın içeriğini panoya kopyalayın
  2. Editör'de, sınıflarınızın yapıştırılmasını istediğiniz yeri seçin
  3. Menüden şunu seçin: EDIT > Paste Special > Paste XML As Classes

22
Ben sadece "JSON Sınıflar olarak Yapıştır" gibi, bu oluşturulan otomatik uygulanan özellikleri diliyorum. Şu anda bu 6 kat şişirilmiş kod sonucu anlamına gelir, bu da okunması çok daha zordur. Bu yalnız başına başka bir araç aramama maalesef.
Nicholas Petersen

1
Bu VS 2013'ün dışında mı kaldı?
Roger

3
@Roger VS 2013'ü kullanmadım, ancak bu özelliğin orada olması gerektiğini düşünüyorum, projenizin .NET 4.5 Framework'ü hedeflediğinden emin olun
miszczu

2
Bu çok daha hızlıdır xsd, ancak çıktı hemen hemen aynıdır.
Jess

4
Yeniden paylaşıcınız yoksa regex kullanın 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; }ve `private \ w + \ w + Field ile değiştirin; \ r \ n \ r \
n`

44

İlk başta Özel Yapıştır'ın kutsal kâse olduğunu düşündüm! Ama sonra denedim ve saçlarım Indiana Jones filmi gibi beyaza döndü.

Ama şimdi http://xmltocsharp.azurewebsites.net/ kullanıyorum ve şimdi her zamanki kadar gençim .

İşte ürettiklerinin bir bölümü:

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
Bu aracın çıktısı güzel, ama sadece bu siteye (veya bu konuda başka herhangi bir hassas veri) göndermemek için orada bir dikkat kelimesi atmak istiyorum. Sunulan hizmeti takdir ederken, gizlilik politikası ve yapıştırdığınız şeyin günlüğe kaydedilmeyeceği ve incelenmeyeceğine dair çok az veya hiç güvence yok.
SvenAelterman

2
Bazı özyinelemeli ilişkileri olan bir xml dosyası vardı (belki dairesel ilişki denir, emin değilim.) Diğerleri başarısız oldu ama xmltocsharp.azurewebsites.net bu xml'de çok başarılı oldu.
Koray

4
@ D.Kermott web sitesi bağlantısı için teşekkürler, ona hızlı bir göz attım ve özel macundan çok daha iyi bir iş yapıyor gibi görünüyor, kod daha temiz görünüyor, testim xml daha fazla sınıf oluşturdu, çok fazlaydı kullanmak daha güzel.
Harag

Yazık ki sınıfların sırasını tersine çeviriyor gibi görünüyor (son listelenen dış elemanlar)
Savage

22

Bunun oldukça eski bir yazı olduğunu ve muhtemelen ilerlediğinin farkındayım.

Ama seninle aynı problemi yaşadım ve kendi programımı yazmaya karar verdim.

Benim için "xml -> xsd -> sınıfları" yolu ile sorun sadece tamamen sürdürülemeyen bir kod yığını oluşturdu ve ben onu çim bitmiş oldu.

Hiçbir şekilde zarif değil ama benim için işi yaptı.

Buradan alabilirsiniz: İsterseniz lütfen önerilerde bulunun.

SimpleXmlToCode


1
yanlış kod üretir: // ELEMENTS [XmlIgnore] public DateTime Value {get; Ayarlamak; } [XmlText] genel dize ValueString {get {return Value? "doğru yanlış"; } {Value = value == "true" ayarını yapın; }}
André Fiedler

Ve inşaatçılar gereksiz + kamuya görünür üyeler için yorumlar eklemelisiniz
André Fiedler

1
Savunmamda benim için çok çabuk tokatladığım bir şeydi. Ben geri gitmedim ama repo herhangi bir değişiklik katkıda bulunmaktan çekinmeyin.
Talon

Bunu birkaç aydır kullanıyorum - mükemmel değil, ama oldukça kullanışlı ve VS2013'ün XML olarak yapıştırmasından çok daha okunabilir / daha basit XML ürettiğini görüyorum. Çok takdir Talon.
codechinchilla

6

Svcutil'i ( svcutil sorusu ) düşünmelisiniz

Hem xsd.exe hem de svcutil, XML şema dosyasında (.xsd) çalışır. XML'iniz bu iki araçtan biri tarafından kullanılacak bir şema dosyasına uymalıdır.

Bunun için çeşitli 3. taraf araçlarının da bulunduğunu unutmayın.


3

Darin tarafından önerilen şekilde xsd kullanabilirsiniz.

Buna ek olarak, daha makul bir şema oluşturmak için test.xsd dosyasını düzenlemeniz önerilir.

type="xs:string"değiştirilebilir type="xs:int"tamsayı değerler için
minOccurs="0"değiştirilebilir minOccurs="1"alanı gerekiyor nerede
maxOccurs="unbounded"değiştirilebilir maxOccurs="1"yalnızca bir öğe izin verilecek yerleri

Verilerinizi daha da doğrulamak istiyorsanız daha gelişmiş xsd-s oluşturabilirsiniz, ancak bu en azından oluşturulan c # 'da makul veri türleri verecektir.


1

XSD dosyasından şema sınıfı oluşturmak için aşağıdaki sözdizimini kullanın.

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

0

XML'i bir C # Sınıfına dönüştürmek için:

  • Microsoft Visual Studio Marketplace'e gidin: - https://marketplace.visualstudio.com
  • Arama çubuğuna metin girin: - sınıf kodu aracına xml
  • Uygulamayı indirin, yükleyin ve kullanın

Not: zamanın dolgunluğunda, bu uygulama değiştirilebilir, ancak şansınız aynı şeyi yapan başka bir araç olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.